我有一份清单:
A = [['andy', 'dear', 'boy', 'tobe', 'todo'],
['where', 'what', 'when', 'how'],
['korea', 'japan', 'china', 'usa'],
['tweet', 'where', 'why', 'how']]
我确切地说三个问题:
我熟悉从列表中检索与特定关键字匹配的所有元素的概念,但在检索与特定关键字匹配的所有列表时,这会让人感到困惑......
任何猜测?提前谢谢。
答案 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']}
享受!