使用字符串搜索列表

kha*_*han 6 python numpy

我有一份清单:

 A = [['andy', 'dear', 'boy', 'tobe', 'todo'], 
      ['where', 'what', 'when', 'how'], 
      ['korea', 'japan', 'china', 'usa'], 
      ['tweet', 'where', 'why', 'how']]
Run Code Online (Sandbox Code Playgroud)

我有三个问题要准确:

  1. 如何使用特定元素作为关键字从此列表中检索子列表?
    例如,我想检索其中包含元素'why'的所有列表?什么是
    这样做的最好的方法是什么?
  2. 如何使用特定元素的一部分作为关键字从此列表中检索子列表?
    例如,我想检索所有包含'wh'元素的列表作为
    任何元素的起始字符?
  3. 如何从这两种搜索方法中获取结果子列表的位置或索引?

我熟悉从列表中检索与特定关键字匹配的所有元素的概念,但在检索与特定关键字匹配的所有列表时,它会令人困惑...

任何猜测?提前致谢.

Rah*_*tam 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
Run Code Online (Sandbox Code Playgroud)

>>> 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]
Run Code Online (Sandbox Code Playgroud)


Gri*_*han 2

首先

>>> for l in A:
...     if 'why' in l:
...             print l
... 
['tweet', 'where', 'why', 'how']
Run Code Online (Sandbox Code Playgroud)

对于第二个:(任何地方)

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

要在开始时进行测试,请尝试以下操作:(使用来自@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']
Run Code Online (Sandbox Code Playgroud)

对于第三个:

要查找索引,您可以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
Run Code Online (Sandbox Code Playgroud)

但请记住,我不太擅长 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
Run Code Online (Sandbox Code Playgroud)