我有下一个清单:
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]]
但它不起作用......
答案 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')]