簡體   English   中英

過濾列表中的元組

[英]Filtering tuples in a list

(Python 2.7,Windows)

大家好,我有一個包含元組的列表,我想過濾掉“(0,0,35)”:

a_list = [(0,0,35), (0,0,35), (9,12,12), (0,0,35), (5,12,6)]

for element in a_list:
    if element is not "(0,0,35)":
        print element

它不起作用。

你能告訴我正確的方法嗎? 謝謝。

這不起作用,因為您正在針對與元組(0,0, 35) "(0,0,35)"的字符串"(0,0,35)"進行測試。 這應該工作:

a_list = [(0,0,35), (0,0,35), (9,12,12), (0,0,35), (5,12,6)]

for element in a_list:
    if element != (0,0,35):
        print element

更好的解決方案可能是使用列表理解來構造過濾列表:

a_list = [(0,0,35), (0,0,35), (9,12,12), (0,0,35), (5,12,6)]
filtered_list = [e for e in a_list if e != (0,0,35)]

這將不起作用,因為元組不能表示為字符串。

>>> (0, 0, 35) == "(0, 0, 35)"
False
>>> 

此外,使用!=而不是is not因為==測試相等(前綴! 平等的測試),但是is為測試id是相同的(在not檢查該id不相同)。

>>> x = (0, 0, 35)
>>> x is (0, 0, 35)
False
>>> x == (0, 0, 35)
True
>>> id(x)
4299863136
>>> id((0, 0, 35))
4299863216
>>> 

嘗試這個:

a_list = [(0,0,35), (0,0,35), (9,12,12), (0,0,35), (5,12,6)]

for element in a_list:
    if element != (0,0,35):
        print element

這應該工作:

[ x for x in a_list if x != (0,0,35) ]

演示:

>>> (1,2,3) == '(1,2,3)'
False
>>> str((1,2,3)) == '(1,2,3)'
False
>>> (1,2,3) == (1,2,3)
True

即使您強行將其轉換為ti也會導致錯誤

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM