嵌套列表理解示例

Nested List Comprehensions Example

问题

我有下一个清单:

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

但是不行...

这是使用 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,对某些人来说很直观,但对其他人来说却不是。上述解决方案完全避免了它们。

你很接近:

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']]
res=[[j.replace("_a_","") for j in i[0]]  for i in l]
#OUT
[['1', '2'], ['3', '4'], ['5', '6']]

另一种方法是使用 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']]

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

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