我有這樣的列表:listvalues = [True, True, False, True, False, 24, somestring, 50]
所以列表的前五個元素是布爾值,其餘的是字符串和整數。 現在我想檢查前五個元素,如果他們是真或假,如果他們是真的,我想要使用某種方法,具體取決於元素的索引。 因此,在上面的情況下,應該爲第一個元素(索引0)做一個動作,然後對第二個元素(索引1)做另一個動作,然後對第四個元素執行另一個動作。 如果所有的布爾值都是錯誤的,則會出現警告。 對不起,noob問題,但我無法找到自己短暫而簡單的解決方案...Python:如何只訪問一個帶有循環的列表的布爾元素?
回答
有許多的東西,這可能有助於在這裏。首先,你應該使用列表切片來隔離布爾值。如果你知道前5個元素是你所追求的,那麼myList[0:5]
將會得到那些並忽略其他元素。
接下來,看看any
函數。它會返回True
如果任何元素是真實的,所以你可以這樣做,以決定是否需要發出警告:
if not any(myList[0:5]):
# Code here to issue the warning.
接下來,對付它的功能是打電話,你可能會想是這樣的:
funcList = [f0, f1, f2, f3, f4]
for idx, test in enumerate(myList[0:5]):
if test: funcList[idx]()
理想的情況下,雖然,有什麼可能會更好地工作將是把個別函數的引用在原來的列表,而不是布爾值,與無的價值,如果你想跳過功能。您原來的名單將最終看起來像這樣:
myList = [f1, f2, None, f3, None, 24, "string", 50]
要打電話要叫你做的那些:
for func in myList[0:5]:
if func is not None: func()
非常感謝,切片在這裏是非常有用的,我不知道任何功能:) – user1106770 2011-12-31 02:08:20
all_false = True
for x in yourlist:
if x is True:
# call some method
# ...
all_false = False
if all_false:
# print warning
鑑於您已經定義要應用於每個個案的功能,你可以把它們放在一個列表在迴路中調用它們
perform = [func1, func2, func3, func4, func5]
if not any(listvalues[:5]): raise Exception
for index in range(5):
if listvalues[index]:
func = perform[index]
func()
如果沒有布爾值,會出現警告嗎?
if not any(filter(lambda x: type(x)==bool, listvalues)):
print "warning"
else:
filter(lambda x: type(x[1])==bool and x[1]==True, enumerate(listvalues))
對不起,忘了前5個元素的一部分,只是切它..並且不需要檢查布爾...
if your_list[:5] == [False,False,False,False,False]:
print 'warning'
else:
method1(your_list[0])
method2(your_list[1])
method3(your_list[2])
method4(your_list[3])
method5(your_list[4])
def method1(myBool):
if myBool == False:
return
--- method content ---
def method2(myBool):
if myBool == False:
return
--- method content ---
...
將是我的解決方案。
我試過你的方法,但它說「放棄:本地變量'方法1'在賦值之前引用」 – user1106770 2011-12-20 09:29:40
- 1. for循環不訪問列表中的所有元素python
- 2. 如何在循環時訪問上一個/下一個元素?
- 3. 如何訪問每個列表的第一個元素列表
- 4. 如何從嵌套循環中的外循環訪問元素?
- 5. 如何在for循環操作中訪問列表中的每個元素?
- 6. 帶有嵌套循環的列表中的元素比較
- 7. Python列表 - 訪問單個元素
- 8. 如何使用循環訪問列表中的所有列表
- 9. 具有固定排序元素的Python布爾列表
- 10. 如何使用循環訪問C#中的表單元素?
- 11. 訪問的最後一個元素的列表在Python
- 12. 的Python:訪問列表元素
- 13. 如何基於python中的另一個列表刪除列表中的元素,沒有循環?
- 14. 訪問Java中的每個通用列表幾個元素只有一次
- 15. 循環後訪問元素的ID
- 16. 如何訪問只有一個元素或多個元素的數組中的同一元素?
- 17. 如何訪問列表中的元素?
- 18. 使用帶循環的布爾變量
- 19. 如何從* ngFor循環元素訪問元素引用?
- 20. 循環直到所有元素都被訪問了N次python
- 21. 如何訪問C++列表迭代器循環中的'previous'元素?
- 22. 訪問django模板中的前一個數組元素循環
- 23. Xslt訪問for-each循環的前一個元素
- 24. 如何訪問列表中對的第一個元素
- 25. Python:在循環列表中刪除列表中的元素
- 26. 如何從Python中的列表創建一個循環列表?
- 27. 循環訪問xml元素問題
- 28. 如何使用python中的變量訪問列表的元素
- 29. 如何循環訪問Java列表
- 30. Python列表:如何在使用循環時讀取前一個元素?
我會建議這種方法存在一個基本問題,它不會產生好的代碼。您可以嘗試用面嚮對象的技術來解決這個問題。 – 2011-12-19 22:15:13
查看'enumerate'的文檔。如果這不是什麼讓你煩惱的話,可以考慮添加一些關於你所嘗試的內容的細節,以及你無法弄清楚的內容。 – 2011-12-19 22:15:48
它是'listvalues = [true,true,false,true,false,24,「somestring」,50]' – 2011-12-19 22:16:29