2016-11-17 127 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