をフィルタリング:はタプルの要素に発見し、私のようなタプルを持っていると仮定すると、彼らに
[('text-1','xxx'), ('img-1','iii'), ('img-2','jjj'), ('text-2','xxx')]
私はリストをフィルタリングと「IMG」で始まる要素を持つ新しいものを作るにしたいです。新しいリストは次のようになります:
[('img-1','iii'), ('img-2','jjj')]
ありがとうございます!
をフィルタリング:はタプルの要素に発見し、私のようなタプルを持っていると仮定すると、彼らに
[('text-1','xxx'), ('img-1','iii'), ('img-2','jjj'), ('text-2','xxx')]
私はリストをフィルタリングと「IMG」で始まる要素を持つ新しいものを作るにしたいです。新しいリストは次のようになります:
[('img-1','iii'), ('img-2','jjj')]
ありがとうございます!
一つの方法:
>>> l = [('text-1','xxx'), ('img-1','iii'), ('img-2','jjj'), ('text-2','xxx')]
>>> [t for t in l if t[0].startswith('img')]
[('img-1', 'iii'), ('img-2', 'jjj')]
別の方法:リスト内包と呼ばれる
>>> filter(lambda x: x[0].startswith('img'), l)
[('img-1', 'iii'), ('img-2', 'jjj')]
最初。関連する技術については、F.C.'s answerを参照してください。基本的な構文は[{expression} for {item_var_or_vars} in {iterable} if {boolean_expression}]
です。
new_list = []
for {item_var_or_vars} in {iterable}:
if {boolean_expression}:
new_list.append({expression})
if {boolean_expression}
ビットは、それがためにループしているだけのように、オプションである:それはこのようなものと同じ意味です。
2つ目は、単に組み込み関数filter
です。これは、テスト関数とiterableを受け取り、テスト関数を "渡す"すべての要素を含むリストを返します。 lambda
、これまで見たことがない場合は、関数を定義するための素早い方法です。あなたは代わりにこれを行うことができます:generator expressionは(それが大規模なリストにいくつかの違いを作ることができる)で
def keep_this_element(element):
return element[0].startswith('img') # returns True for ('img...', '...')
new_list = filter(keep_this_element, l) # keeps only elements that return True
ちょうど別の方法
>>> l = [('text-1','xxx'), ('img-1','iii'), ('img-2','jjj'), ('text-2','xxx')]
>>> (x for x in l if x[0].find('img') == 0)
0: <generator object <genexpr> at 0x917a00>
>>> gen = (x for x in l if x[0].find('img') == 0)
>>> list(gen)
1: [('img-1', 'iii'), ('img-2', 'jjj')]
tuple_filter = lambda t, i, w: filter(lambda a: a[i].startswith(w), t)
newtuple = tuple_filter(thetuple, 0, 'img')
これは素晴らしいことです。これらのテクニックの両方の名前はありますか?私はこれらの方法についてより多くの読書をしたいと思います。ありがとう。 – sidewinder
@Awais、詳細は私の編集をご覧ください。 – senderle
最初は[list comprehension](http://docs.python.org/tutorial/datastructures.html#list-comprehensions)、2番目は[filter](http://docs.python.org/library/functions .html#filter)と[lambda expression](http://docs.python.org/reference/expressions.html#lambda) – agf