2016-11-17 118 views
0

我想列表的第一个项目拆分到两个项目,为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])] 

我已经尝试了几种方法,但由于我是一个业余爱好者,我无法做到这一点。

+1

后一个你尝试过的方式,你会得到一些帮助,相信我 –

+0

你应该澄清你期望的分裂的数据类型,因为目前有两个同样正确的答案,但取决于最终结果实际上是什么。即“09.03”必须是浮动还是str? – idjaw

回答

2
[tuple([j] for j in i[0].split('/')) + (i[1],) for i in l] 

# [(['pzibley'], ['09.03'], [8, 0, 2, 0, 0]), 
# (['pzibley'], ['09.01'], [7, 2, 0, 0, 1])] 
+0

这不会在分割字符串的第二部分上施加“浮动” – James

+0

@James True,不确定OP是否希望它被转换。 OP仍然有'09.03' – Psidom

+0

呃......好点,我没有注意到。 – James

0
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) 

由于元组是不可变的,你不得不重新分配到整个元组,不只是在元组的第一个元素。

1

定义,在输入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])] 
0

对于一个初学者理解是沿外观在列表行的答案,分开的每个项目,并将它们添加到您在遵循远远低于所需的列表的最简单的解决方案:

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])] 
+0

这是错误的输出。再看看OP所期望的输出。 – idjaw

+0

感谢idjaw,错过了元组位......但没关系,我们有像詹姆斯这样的复印机能够充分信任纠正人们的工作。莽撞是不真实的 – FancyDolphin

3
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])] 
+0

使用'append'会比使用列表理解的替代答案慢吗? –

+0

一般来说,是的。但是,除非这是通过非常大量的数据进行操作,否则差异可以忽略不计。 – James