2017-05-25 131 views
3

我有一个包含其他列表作为元素的列表。在列表python中查找列表

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

你能证明*你自己解决这个问题的努力吗? –

+0

更新了我的代码。 –

+0

@MohamedIbrahim您是否想要测试是否在任何元素中出现“k”,即使是例如“deek”意思是包含一行?或者,如果最后3个单字母字符串中出现单个字母“k”,您是否只希望将其包括在内? –

回答

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']]]] 
+0

我怎样才能动态地做到这一点,而不必在手动代码中输入'a'和'b'键 –

+2

@MohamedIbrahim你知道变量是如何工作的吗? – alex

+0

@MohamedIbrahim,现在看。我刚刚添加了给定键的for循环。 –

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