(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 :(得分:3)
这不起作用,因为您正在测试与元组"(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
更好的解决方案可能是使用list comprehension构建过滤后的列表:
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)]
答案 1 :(得分:2)
这不起作用,因为元组不能表示为字符串。
>>> (0, 0, 35) == "(0, 0, 35)"
False
>>>
另外,使用!=
代替is not
因为==
测试相等(前缀!
测试 相等),但{ {1}} 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
>>>
答案 2 :(得分:1)
这应该有效:
[ 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
即使你强行使用str ti也会导致错误