过滤列表中的元组

时间:2014-11-11 02:50:38

标签: python list tuples

(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

它确实无效。

你能告诉我正确的方法吗?感谢。

3 个答案:

答案 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 的测试结果相同(idnot检查不相同。

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也会导致错误