在Python中查找列表中的列表

3
我有一个包含其他列表作为元素的列表。
mylist=[
         [1, 'Asfoor', 'a', 'b', 'c'], 
         [2, 'deek', 'j', 'a', 'k'], 
         [3, 'bata', 'k', 'a', 'p'],
         [4,'farkha','v','m','k']
       ]

现在,我想在上面的列表中查找另一个列表元素'a'和'k'的出现情况,并需要输出以特定格式呈现。
second list=['a','k']

例如,如果第一个列表中的任何元素包含第二个列表中的'a'元素,则输出列表应该类似于这样:
['a',
     [
         [1, 'Asfoor', 'a', 'b', 'c'], 
         [2, 'deek', 'j', 'a', 'k'], 
         [3, 'bata', 'k', 'a', 'p']
     ]
]

同样地,如果列表包含'k',则输出如下:
['k',
         [2, 'deek', 'j', 'a', 'k'], 
         [3, 'bata', 'k', 'a', 'p'],
         [4,'farkha','v','m','k']
]

任何好的Python方法都将不胜感激。

5
你能展示你自己解决这个问题所做的任何努力吗? - Scott Hunter
更新了我的代码。 - Mohamed Ibrahim
@MohamedIbrahim,您想测试是否在任何元素中出现了 k,甚至是单词,例如 'deek' 是否意味着包含了一行?还是只有当单个字母 k 出现在最后3个单个字母字符串中时才包含它? - Paul Rooney
不,我只想在列表中找到元素k的出现次数,而不是在单词中。 - Mohamed Ibrahim
3个回答

1
你可以这样做:

你可以像这样做:

def found(a, key):
    return key in a:


keys = ['a', 'k']

final = []
for j in keys:
    final.append([j , [k for k in mylist if found(k, j)]])

# Or simply within list comprehension:
# final = [[j , [k for k in mylist if found(k, j)]] for j in keys]


print(final)

输出:

[['a',
  [[1, 'Asfoor', 'a', 'b', 'c'],
   [2, 'deek', 'j', 'a', 'k'],
   [3, 'bata', 'k', 'a', 'p']]],
 ['k',
  [[2, 'deek', 'j', 'a', 'k'],
   [3, 'bata', 'k', 'a', 'p'],
   [4, 'farkha', 'v', 'm', 'k']]]]

2
@MohamedIbrahim 你知道变量是如何工作的吗? - alex
1
谢谢。现在我明白了。 - Mohamed Ibrahim
1
哦不。found() 函数计算布尔表达式,然后根据其值返回 true 或 false。实际上,found(a, key): return key in a 就足够了。 - 9000
@9000 你说得对 :-) 我只是觉得这对于提问者有帮助,他是 Python 新手。这就是为什么我写成那样的原因。我会编辑我的代码。 - Chiheb Nexus
1
@MohamedIbrahim:两种都是正确的,但其中一种比另一种要短得多。 - 9000
显示剩余4条评论

0
您可以按照以下方式测试一个字符串是否在列表中:
for row in my_list:  # finding 'a' in list
    if 'a' in row:
        print(row)

for row in my_list:  # finding 'k' in list
    if 'k' in row:
        print(row)

打印行需要使用"\t"(制表符)和其他一些字符,这取决于您所需的输出格式。

0
print([sublist for sublist in mylist if 'a' in sublist])
# returns:
[
  [1, 'Asfoor', 'a', 'b', 'c'],
  [2, 'deek', 'j', 'a', 'k'],
  [3, 'bata', 'k', 'a', 'p']
]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接