我正在使用列表存储属性,当我搜索相同的项目时出现了这个问题:
l = [['a',1,2],['b',1,2],['c',2,3],['d',1,2]]
if [any,1,2] in l:
print ('blue')
elif [any,2,3] in l:
print('red')
期望的输出
blue
我想要的是被忽略的第一个值/可以是任何值。 我知道任何函数都不能以这种方式工作,但这样做的正确方法是什么?
也许这更容易理解
l = [['a',1,2],['b',1,2],['c',2,3],['d',1,2]]
for a in range(0,4):
if [1,2] == x[1:] for x in l:
print ('blue')
elif [2,3] == x[1:] for x in l:
print('red')
答案 0 :(得分:0)
对于过滤相同的项目(根据您的定义),您可以使用列表理解和切片:
>>> lst = [['a',1,2],['b',1,2],['c',2,3],['d',1,2]]
>>> [e for e in lst if e[1:] == [1,2]]
[['a', 1, 2], ['b', 1, 2], ['d', 1, 2]]
答案 1 :(得分:0)
:由于pkacprzak,D实际上设法在一行中完成。
l = [['a',1,2],['b',1,2],['c',2,3],['d',1,2]]
if any(True for x in l if x[1:] == [1,2]):
print ('blue')
elif any(True for x in l if x[1:] == [2,3]):
print('red')
代码的工作原理如下:
True for x in l
迭代l(< ---这是字母L btw)并且如果下一位为True则返回True
if x[1:] == [1,2]
这将检查除第一个之外的所有x值并返回True
any(...)
查找从any中的位返回的任何值是否为True
您还可以返回第一项的值,如此
[x[0] for x in l if x[1:] == [1,2]]
并迭代它
答案 2 :(得分:-1)
对于完全通用的情况,只需引入一些神奇的符号来表示任何'喜欢' *'并编写自己的简单比较器
def matches(element, mask):
for el, mask_el in zip(element, mask):
if mask_el != '*' and el != mask_el:
return False
return True
现在你可以做到
for list_el in list:
if matches(list_el, ['*', 1, 2]):
print 'blah'
好消息是它非常通用,并且可以使用任意数量的' *'在你的面具。