嵌套列表理解示例

时间:2018-04-16 12:18:44

标签: python list for-loop list-comprehension nested-loops

问题

我有下一个清单:

a = (('_a_1', '_a_2'), [0.3, 0.6]) 
b = (('_a_3', '_a_4'), [0.15, 0.56]) 
c = (('_a_5', '_a_6'), [0.22, 0.6])

l = [a, b, c]

我不想:选择列表的第一个元组并删除_a_标签。 结果:

[['1','2'],['3','4'],['5','6']]

我尝试了什么

我知道我可以使用列表理解来做到这一点。但我无法理解它:D 我在尝试什么:

[ el.replace('_a_','') for m in l for el in m[0]]

结果:

['1', '2', '3', '4', '5', '6']

我认为它对于正确的解决方案是封闭的。只需添加以下内容:

[ [el.replace('_a_','') for m in l] for el in m[0]]

但它不起作用......

5 个答案:

答案 0 :(得分:2)

以下是使用str.split的一种方式:

a = (('_a_1', '_a_2'), [0.3, 0.6]) 
b = (('_a_3', '_a_4'), [0.15, 0.56]) 
c = (('_a_5', '_a_6'), [0.22, 0.6])

res = [[i.split('_')[-1], j.split('_')[-1]] for (i, j), k in [a, b, c]]

# [['1', '2'], ['3', '4'], ['5', '6']]

您还可以使用str.replace

res = [[i.replace('_a_', ''), j.replace('_a_', '')] for (i, j), k in [a, b, c]]

正如@ Ev.Kounis所建议的那样,你也可以在功能上写这个:

res = [list(map(lambda x: x.rsplit('_', 1)[-1], k)) for k, _ in [a, b, c]]

嵌套列表推导require specific ordering,对某些人而言是直观的,但对其他人则不直观。上述解决方案完全避免了它们。

答案 1 :(得分:1)

你很亲密:

a = (('_a_1', '_a_2'), [0.3, 0.6]) 
b = (('_a_3', '_a_4'), [0.15, 0.56]) 
c = (('_a_5', '_a_6'), [0.22, 0.6])

l = [a, b, c]

[ [el.replace('_a_','') for el in tup[0]] for tup in l]
# [['1', '2'], ['3', '4'], ['5', '6']]

答案 2 :(得分:0)

(None, classes)

答案 3 :(得分:0)

另一种方法是使用zip函数:

a = (('_a_1', '_a_2'), [0.3, 0.6]) 
b = (('_a_3', '_a_4'), [0.15, 0.56]) 
c = (('_a_5', '_a_6'), [0.22, 0.6])

l = [[elem[0][-1],elem[1][-1]] for elem in list(zip(a,b,c))[0]]

print(l)

输出:

[['1', '2'], ['3', '4'], ['5', '6']]

答案 4 :(得分:0)

你可以使用正则表达式而不拆分它:

import re
pattern=r'[0-9]+'

print([tuple(map(lambda x:re.search(pattern,x).group(),i[0])) for i in l])

输出:

[('1', '2'), ('3', '4'), ('5', '6')]
相关问题