0

「A」で始まるオブジェクトとそうでないオブジェクトのリストがあります。

リスト内包表記またはラムダ関数 (できれば) を使用して、それぞれを調べて、要素が「A」で始まらない場合は、それを追加します (または編集されたリストを返します)。

私はこれのようないくつかのことを試しました(ここで y はリストです):

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

しかし、同じリストを返しています、y.

どんな助けでも大歓迎です。ありがとう!

編集:たとえば、リスト ['Alligator', 'pple', 'banana'] から始めた場合、行はリスト ['Alligator', 'Apple', 'Abanana'] を返します。

4

5 に答える 5

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']
于 2013-08-04T14:34:23.893 に答える
2

このリスト内包表記を使ってみてください:

[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')usingは、 if を尋ねるよりも慣用的で明確であることに注意してくださいx[0] == 'A'

于 2013-08-04T14:34:49.297 に答える
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')]
于 2013-08-04T15:30:28.663 に答える
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」で始まらない項目に「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']
于 2013-08-04T14:34:18.110 に答える
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']
于 2013-08-04T14:36:28.650 に答える