我想列表的第一个项目拆分到两个项目,为exapmle我想转换:我怎么可以拆分列表项
l= [('pzibley/09.03', [8, 0, 2, 0, 0]), ('pzibley/09.01', [7, 2, 0, 0, 1])]
到:
l= [([pzibley], [09.03], [8, 0, 2, 0, 0]), ([pzibley] , [09.01], [7, 2, 0, 0, 1])]
我已经尝试了几种方法,但由于我是一个业余爱好者,我无法做到这一点。
我想列表的第一个项目拆分到两个项目,为exapmle我想转换:我怎么可以拆分列表项
l= [('pzibley/09.03', [8, 0, 2, 0, 0]), ('pzibley/09.01', [7, 2, 0, 0, 1])]
到:
l= [([pzibley], [09.03], [8, 0, 2, 0, 0]), ([pzibley] , [09.01], [7, 2, 0, 0, 1])]
我已经尝试了几种方法,但由于我是一个业余爱好者,我无法做到这一点。
l = [('pzibley/09.03', [8, 0, 2, 0, 0]), ('pzibley/09.01', [7, 2, 0, 0, 1])]
for i in range(len(l)):
l[i]=(l[i][0].split('/'),l[i][1])
print(l)
由于元组是不可变的,你不得不重新分配到整个元组,不只是在元组的第一个元素。
定义,在输入tuple
各部分分开,并进行重新组合一个元组里面的函数:
def splitter(tpl):
a,b = tpl[0].split("/")
return(([a], [float(b)] , tpl[1]))
我们可以迭代splitter
功能在列表l
:
[splitter(x) for x in l]
运行它产生:
In [5]: [splitter(x) for x in l]
Out[5]:
[(['pzibley'], [9.03], [8, 0, 2, 0, 0]),
(['pzibley'], [9.01], [7, 2, 0, 0, 1])]
对于一个初学者理解是沿外观在列表行的答案,分开的每个项目,并将它们添加到您在遵循远远低于所需的列表的最简单的解决方案:
l_new=[]
l= [('pzibley/09.03', [8, 0, 2, 0, 0]), ('pzibley/09.01', [7, 2, 0, 0, 1])]
for i in l:
temp = i[0].split('/')
l_new.append(([temp[0]],[temp[1]],i[1]))
print(l_new)
#[(['pzibley'], ['09.03'], [8, 0, 2, 0, 0]), (['pzibley'], ['09.01'], [7, 2, 0, 0, 1])]
这是错误的输出。再看看OP所期望的输出。 – idjaw
感谢idjaw,错过了元组位......但没关系,我们有像詹姆斯这样的复印机能够充分信任纠正人们的工作。莽撞是不真实的 – FancyDolphin
new_l = []
for tup in l:
a,b = tup[0].split('/')
new_l.append(([a], [float(b)], tup[1]))
new_l
# [(['pzibley'], [9.03], [8, 0, 2, 0, 0]), (['pzibley'], [9.01], [7, 2, 0, 0, 1])]
使用'append'会比使用列表理解的替代答案慢吗? –
一般来说,是的。但是,除非这是通过非常大量的数据进行操作,否则差异可以忽略不计。 – James
后一个你尝试过的方式,你会得到一些帮助,相信我 –
你应该澄清你期望的分裂的数据类型,因为目前有两个同样正确的答案,但取决于最终结果实际上是什么。即“09.03”必须是浮动还是str? – idjaw