6

我有一个列表列表:

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

我有三个确切的问题:

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

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

有什么猜测吗?提前致谢。

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

首先

>>> 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的startswith()

>>> 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)在 print stamens 之后使用方法,例如:

>>> 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 回答
2

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

一个

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

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

有点难读,但简洁明了。

C

然后获取找到每个 sub_lists 的位置的索引

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

只需替换bfora即可获取部分 b 的位置。

于 2013-04-05T05:39:29.827 回答
0

您可以按照对单个列表执行此操作的方式执行此操作,但您需要一个额外的循环:

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

对于职位,enumerate在您想要职位的特定循环中添加一个会有所帮助,或者简单地find为每个内部列表使用类似的东西也可以完成这项工作。

于 2013-04-05T05:13:12.710 回答
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,有一个查找字符串的函数来查看子字符串是否存在,如果确实存在,然后将其附加到列表元素:

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

C。对于问题a,在您检查count 大于0 之后,这意味着该单词存在于列表中。做一个 list.index(word) ,它将返回索引。对于问题 b,一旦找到具有正确子字符串的字符串,请执行 list.index(word)。

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

于 2013-04-05T05:35:07.060 回答
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

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

>>> 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']}

请享用!

于 2013-04-05T07:33:21.100 回答