6

リストのリストがあります:

 A = [['andy', 'dear', 'boy', 'tobe', 'todo'], 
      ['where', 'what', 'when', 'how'], 
      ['korea', 'japan', 'china', 'usa'], 
      ['tweet', 'where', 'why', 'how']]

正確に言うと、3 つの質問があります

  1. 特定の要素をキーワードとして使用して、このリストからサブリストを取得するにはどうすればよいですか?
    たとえば、要素 'why' を含むすべてのリストを取得したいですか?
    そうするための最良の方法は何ですか?
  2. 特定の要素の一部をキーワードとして使用して、このリストからサブリストを取得するにはどうすればよいですか?
    たとえば、要素の先頭
    文字として「w」を含む要素を持つすべてのリストを取得したいですか?
  3. これら 2 つの検索方法のいずれかから結果のサブリストの位置またはインデックスを取得するにはどうすればよいですか?

特定のキーワードに一致するリストからすべての要素を取得するという概念には精通していますが、特定のキーワードに一致するすべてのリストを取得するとなると混乱します...

推測はありますか?前もって感謝します。

4

8 に答える 8

6

シンプルでストレート

elem = 'why'
index_li = []
for idx, item in enumerate(A):
    for word in item:
        if word.startswith(elem):
            index_li.append(idx)
            break
print index_li

>>> elem = 'wh'
... index_li = []
... for idx, item in enumerate(A):
...     for word in item:
...         if word.startswith(elem):
...             print word, item
...             index_li.append(idx)
...             break
... print index_li
where ['where', 'what', 'when', 'how']
where ['tweet', 'where', 'why', 'how']
[1, 3]
于 2013-04-05T05:43:14.090 に答える
3

すべての回答を組み合わせると、次のようになります。

mylist = [['andy', 'dear', 'boy', 'tobe', 'todo'], ['where', 'what', 'when', 'how'], ['korea', 'japan', 'china', 'usa'], ['tweet', 'where', 'why', 'how']]
for num, sublist in enumerate(mylist):
    if 'why' in sublist:
        print sublist
    for ele in sublist:
        if ele.startswith('wh'):
            print ele, num
于 2013-04-05T05:15:43.273 に答える
2

私はリスト内包表記と関数型プログラミングが大好きなので、そのアプローチを紹介します

sub_list_a = [ el for el in A if 'why' in el ]

B

sub_list_b = [ el for el in A if any( ['wh' in s for s in el] ) ]

少し読みにくいですが、簡潔で理にかなっています。

C

次に、各サブリストが見つかった場所のインデックスを取得します

location_a = [ ii for ii, el in enumerate(A) if el in sub_list_a ]

bforを置き換えるだけaで、パーツ b の位置を取得できます。

于 2013-04-05T05:39:29.827 に答える
2

最初に:

>>> for l in A:
...     if 'why' in l:
...             print l
... 
['tweet', 'where', 'why', 'how']

2番目の場合:(どこでも)

>>> for l in A:
...     for i in l:
...             if 'wh' in i:
...                     print l
...                     break
... 
['where', 'what', 'when', 'how']
['tweet', 'where', 'why', 'how']

最初にテストするには、これを試してください: ( @Harido の startswith() を使用)

>>> for l in A:
...     for i in l:
...             if i.startswith('wh'):
...                     print l
...                     break
... 
['where', 'what', 'when', 'how']
['tweet', 'where', 'why', 'how']

3 番目の場合:

インデックスを見つけるにはA.index(l)、たとえば雄しべを印刷した後にメソッドを使用できます。

>>> for l in A:
...     for i in l:
...             if 'wh' in i:
...                     print l
...                     print A.index(l)
...                     break
... 
['where', 'what', 'when', 'how']
1
['tweet', 'where', 'why', 'how']
3

しかし、私はPythonが得意ではないことを覚えておいてください。誰かがあなたにもっと良い方法を与えることができます。(私は貧弱な C のようなコードを書いています) このリンクを共有したいと思います: Guido van Rossum

編集

私に提案してくれた@Jaimeに感謝しますfor k, l in enumerate(A):

>>> for k, l in enumerate(A):
...     for i in l:
...             if 'wh' in i:
...                     print l
...                     print "index =", k
...                     break
... 
['where', 'what', 'when', 'how']
index = 1
['tweet', 'where', 'why', 'how']
index = 3
于 2013-04-05T05:12:06.573 に答える
0
>>> A = [['andy', 'dear', 'boy', 'tobe', 'todo'], ['where', 'what', 'when', 'how'], ['korea', 'japan', 'china', 'usa'], ['tweet', 'where', 'why', 'how']]
>>> for i, sublist in enumerate(A):
        if 'why' in sublist:
            print i, sublist


3 ['tweet', 'where', 'why', 'how']
>>> for i, sublist in enumerate(A):
        if any(word.startswith('wh') for word in sublist):
            print i, sublist


1 ['where', 'what', 'when', 'how']
3 ['tweet', 'where', 'why', 'how']
于 2013-04-05T05:39:03.257 に答える
0

追加のループが必要になることを除いて、単一のリストに対して行うのと同じ方法でこれを行います。

for inner_list in A:
    for element in inner_list:
        if # <some condition>
            # <do something>

enumerate位置については、位置が必要な特定のループに を追加するか、単にfindfor each inner list のようなものを使用するだけでも機能します。

于 2013-04-05T05:13:12.710 に答える