我想列表的第一個項目拆分到兩個項目,爲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