使用字符串搜索列表

时间:2013-04-05 05:09:24

标签: python numpy

我有一份清单:

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

我确切地说三个问题

  1. 如何使用特定元素作为关键字从此列表中检索子列表? 例如,我想检索其中包含元素'why'的所有列表?什么是 最好的方式吗?
  2. 如何使用特定元素的一部分作为关键字从此列表中检索子列表?
    例如,我想检索所有包含'wh'作为开头的元素的列表 任何元素的字符?
  3. 如何从这两种搜索方法中获取结果子列表的位置或索引?
  4. 我熟悉从列表中检索与特定关键字匹配的所有元素的概念,但在检索与特定关键字匹配的所有列表时,这会让人感到困惑......

    任何猜测?提前谢谢。

8 个答案:

答案 0 :(得分: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]

答案 1 :(得分: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

答案 2 :(得分:2)

首先

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

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

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

在开始时测试尝试:( 使用来自@Harido的START /(

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

第三名

要查找索引,您可以在打印雄蕊之后使用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

答案 3 :(得分:2)

我喜欢列表推导和函数式编程,所以这就是方法

<强> A

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 ]

只需替换b的{​​{1}}即可获取b部分的位置。

答案 4 :(得分:0)

除了你需要一个额外的循环之外,你就像对一个列表那样做了这个:

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

对于职位,在特定循环中添加enumerate,您希望该职位有所帮助,或者只是为每个内部列表使用find之类的东西也可以完成这项工作。

答案 5 :(得分:0)

一个。假设你有一个列表A,你要找的是x。

def howmuch(word)
    lis = []
    for x in A:
        //point A
        if x.count(word) > 0:
        //point A
            lis.append(x)
    return lis

基本上lis是一个列表,其中包含具有该单词的所有列表。你遍历原始列表。每个元素x都是一个列表。 x.count(word)告诉您该单词在此列表中的次数。 0表示它从未出现在列表中。所以如果它大于0,它必须在列表中。如果是这样,我们添加到我们的lis变量。然后我们回来了。

湾它与问题a是一样的,除了在A点,在你得到列表之后,为那里的每个单词做另一个for循环。对于python,有一个字符串的查找函数,看它是否存在子字符串,如果它存在,则将其附加到list元素:

http://docs.python.org/2/library/string.html

℃。对于问题a,在检查该计数是否大于0之后,则表示该单词存在于列表中。做一个list.index(word),它将返回索引。对于问题b,一旦找到具有正确子字符串的字符串,请执行list.index(word)。

总而言之,你应该看一下python网站,它告诉你很多你可以使用的功能。

答案 6 :(得分: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']

答案 7 :(得分:0)

您可以使用这种简单的方法:

>>> key='wh'
>>> res=[(index, sublist) for index, sublist in enumerate(A) for value in sublist if  value.startswith(key)]
>>> dict(res)
{1: ['where', 'what', 'when', 'how'], 3: ['tweet', 'where', 'why', 'how']}

享受!