2013-08-04 46 views
0

我有一個對象列表,其中一些以'A'開頭,其中一些沒有。如何最小化字符串附加到Python中的一行?

使用列表理解或lambda函數(最好),我想通過每一個,如果元素不是以'A'開頭,要添加它(或返回一個編輯列表)。

我已經嘗試了一些東西,比如這個(其中y是列表):

filter(lambda x: x if x[0] == 'A' else "A" + x, y) 

但它返回相同的列表,Y。

任何幫助表示讚賞;謝謝!例如,如果我從列表['Alligator','pple','banana']開始,該行將返回列表['Alligator','Apple','Abanana']。

+0

請包括一些示例數據,字符串列表。以及您希望結果如何! –

回答

4

你想地圖,不能過濾:

map(lambda x: x if x[0] == 'A' else "A" + x, y) 

,或者使用列表理解:

[x if x[0] == 'A' else "A" + x for x in y] 

過濾與if語句類似,在列表理解結束時,映射與開始時的表達式相當。

演示:

>>> y = ['Alligator', 'pple', 'banana'] 
>>> map(lambda x: x if x[0] == 'A' else "A" + x, y) 
['Alligator', 'Apple', 'Abanana'] 
>>> [x if x[0] == 'A' else "A" + x for x in y] 
['Alligator', 'Apple', 'Abanana'] 
0

如果你需要找到與「A」開頭的項目,你可以使用列表理解或filter

>>> l = ["Aaaa", "test", "A1", "1"] 
>>> [item for item in l if item.startswith('A')] 
['Aaaa', 'A1'] 
>>> l = ["Aaaa", "test", "A1", "1"] 
>>> filter(lambda item: item.startswith('A'), l) 
['Aaaa', 'A1'] 

如果你想「A」添加到列表中的該dont't啓動項目與'A',你可以使用列表理解或map

>>> l = ["Aaaa", "test", "A1", "1"] 
>>> ['A' + item if not item.startswith('A') else item for item in l] 
['Aaaa', 'Atest', 'A1', 'A1'] 
>>> map(lambda item: 'A' + item if not item.startswith('A') else item, l) 
['Aaaa', 'Atest', 'A1', 'A1'] 

僅供參考,你會在這兩種情況下得到一個新的列表。如果你想就地修改列表,你可以試試這個代碼:

>>> l = ["Aaaa", "test", "A1", "1"] 
>>> for i in range(len(l)): 
...  if not l[i].startswith('A'): 
...   l[i] = 'A' + l[i] 
... 
>>> l 
['Aaaa', 'Atest', 'A1', 'A1'] 
2

嘗試使用這個list解析:

[x if x.startswith('A') else 'A' + x for x in lst] 

例如:

y = ['Alligator', 'pple', 'banana'] 
[x if x.startswith('A') else 'A' + x for x in y] 
=> ['Alligator', 'Apple', 'Abanana'] 

注意使用x.startswith('A')比詢問是否x[0] == 'A'更地道,更清晰。

0

列表理解

>>> y = ['A1', 'B1', 'A2', 'B2'] 
>>> [i if i[0] == 'A' else 'A%s'%i for i in y] 
['A1', 'AB1', 'A2', 'AB2'] 

你舉的例子:

>>> y = ['Alligator', 'pple', 'banana'] 
>>> [i if i[0] == 'A' else 'A%s'%i for i in y] 
['Alligator', 'Apple', 'Abanana'] 
0

那麼,如果你真的想使你的filter方向的工作,你可以這樣做:

>>> example=['Alligator', 'pple', 'banana'] 
>>> for i,e in filter(lambda t: t[1][0]!='A',enumerate(example)):  
...  example[i]='A'+e 
>>> example 
['Alligator', 'Apple', 'Abanana'] 

您篩選返回你想改變的項目,並且enumerate給出一個索引該項要更改爲元組:

>>> filter(lambda t: t[1][0]!='A',enumerate(example)) 
[(1, 'pple'), (2, 'banana')] 
>>> filter(lambda t: t[1][0]=='A',enumerate(example)) 
[(0, 'Alligator')] 
相關問題