我有這樣的結構:檢查,如果項目是在列表中,然後返回該項目
['a;1,2,3\n', 'b;abc\n', ...]
換句話說
:這是一個List
像這樣的項目:'id;element1,element2,...\n'
現在我想檢查列表包含了ID = "b"
一個元素,如果它cotains項目"b"
我想回到整個元素:
'b;abc\n'
如何用python做到這一點?是否有可能通過in
聲明來做到這一點?
我有這樣的結構:檢查,如果項目是在列表中,然後返回該項目
['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