检查,如果项目是在列表中,然后返回该项目
我有这样的结构:检查,如果项目是在列表中,然后返回该项目
['a;1,2,3\n', 'b;abc\n', ...]
换句话说
:这是一个List
像这样的项目:'id;element1,element2,...\n'
现在我想检查列表包含了ID = "b"
一个元素,如果它cotains项目"b"
我想回到整个元素:
'b;abc\n'
如何用python做到这一点?是否有可能通过in
声明来做到这一点?
这将返回符合条件的所有物品的清单,我认为它可能有不止一个相匹配的结果,如果只有1条结果,结果列表将有1项。
>>> input = ['a;1,2,3\n', 'b;abc\n']
>>> filter(lambda item:item.find('b;') == 0 ,input)
['b;abc\n']
这将检查整个列表,即使它找到的项目 – jamylak 2013-04-30 09:10:30
@jamylak我同意,但我所做的假设,而不是发现第一次发生,OP可能正在寻找一件物品的所有事件。 – DhruvPathak 2013-04-30 09:11:57
啊,那也可以 – jamylak 2013-04-30 09:20:31
>>> L = ['a;1,2,3\n', 'b;abc\n']
>>> next((x for x in L if x.partition(';')[0] == 'b'), 'No match')
'b;abc\n'
您可以使用下面的函数来提取您的结构匹配的所有元素的列表:
def query(data, key):
return [ x for x in data if x.startswith(key + ';') ]
使用例:
data = [
'a;1,2,3\n',
'b;abc\n',
'c;4,5,6\n'
]
print query(data, 'b')
这给列表。如果你要求一个不存在的密钥,结果是空的列表。
其他方法最有可能更快。
>>> L = ['a;1,2,3\n', 'b;abc\n']
>>> temp = [i.split(';') for i in L]
>>> ';'.join([x for x in temp if x[0] == 'b'][0])
'b;abc\n'
最近有这么多的列表理解问题。连续四次。这对其他人来说看起来很奇怪吗? – TerryA 2013-04-30 08:56:27
列表理解问题的级别太高了。 – 2013-04-30 08:57:27
我发誓我以前见过这个问题,但也许我想象的还要 – jamylak 2013-04-30 08:58:54