[英]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.