Python 嵌套列表理解示例 问题

Python 嵌套列表理解示例 问题,python,list,for-loop,list-comprehension,nested-loops,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] 我不想做的事情:选择列表的第一个元组并删除标签。 结果: 我试过的 我知道我可以使用列表理解来完成。但我不能理解:D 我正在尝试的是: [ el.replace('_a_','') for m in l for el in m[

我有下一个清单:

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]
我不想做的事情:选择列表的第一个元组并删除标签。 结果:


我试过的 我知道我可以使用列表理解来完成。但我不能理解: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]]
嵌套列表理解,对某些人直观,但对其他人不直观。上述解决方案完全避免了这些问题。

您很接近:

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

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

您可以使用regex而不拆分它:

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

你能用语言解释你的理解在做什么吗?这将有助于你澄清更多的问题,而不仅仅是在这里添加随机括号there@MadPhysicist我想把内环放到list
[]
@Mikhail\u Sam中,你发布的代码声称可以工作,但实际上没有。它抛出
名称错误:未定义名称“m”
@Ev.kounis你说得对!从错误的地方复制的!谢谢。这是否意味着,如果我添加内括号,我必须
反向
逻辑:在通常的嵌套循环中,每个内循环都在末尾添加,但在这里,内循环添加在左侧?或者
[列表(map(lambda x:x.rsplit('''u',1)[-1],k)],对于k,[a,b,c]
,这可能会稍微快一点。尽管如此,+1fyi,使用
map
的解决方案的速度要慢两倍多。@Arne,我一点也不奇怪,但感谢您的注意。我想在学习过程中看到不同的方法是很好的。一般来说,如果答案中包含了对代码意图的解释,以及在不介绍其他代码的情况下解决问题的原因的解释,那么答案会更有帮助。代码似乎是自明的,没有什么太复杂的,除非解释:)好吧,您可以解释原始尝试失败的原因,以及代码如何修复该问题。共享工作代码也是如此,但要了解为什么有些东西不工作!干杯
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')]