如果我有:
my_list = (('foo', 'bar'), ('floo', 'blar'))
如何轻松测试某些字符串是否位于任何元组的第一个元素中?
类似的东西:
if 'foo' in my_list
我们只是检查列表中每个元组的第一个元素?
答案 0 :(得分:3)
如果您只想检查每个元组中的第一项:
if 'foo' in (item[0] for item in my_list)
可替换地:
if any('foo' == item[0] for item in my_list)
答案 1 :(得分:3)
首先,my_list
是一个元组,而不是列表。
>>> my_list = (('foo', 'bar'), ('floo', 'blar'))
>>> 'foo' in zip(*my_list)[0]
True
如果您愿意,也可以使用itertools
:
>>> from itertools import izip
>>> 'foo' in next(izip(*my_list))
True
答案 2 :(得分:1)
使用电池:
if 'foo' in itertools.imap(operator.itemgetter(0), my_list):
这不会创建元组的副本(它实际上是一个元组,而不是列表),应该是最快的。
答案 3 :(得分:0)
if 'foo' in map(lambda x: x[0], my_list):
<do something>
map
获取列表中的每个元素,向其应用函数,并返回结果列表。在这种情况下,函数是一个lambda函数,它只返回原始元素的第一个子元素。
((0,1),(3,4))
变为(0,3)
。
答案 4 :(得分:0)
my_list = iter(my_list)
result = False
while True:
try:
x, y = my_list.next()
if x == 'foo':
result = True
break
except StopIteration:
break