2017-12-18 381 views
0

我與它的元組看起來像這樣的列表:修改列表保持的元組

my_list = (u'code', u'somet text', u'integer', [(u'1', u'text1'), (u'2', u'text2'), (u'3', u'text3'), (u'4', u'text4'), (u'5', u'text5')]) 

我想遍歷my_list[3]和複製休息,所以我會得到n個列表看起來像這樣:

(u'code', u'somet text', u'integer', u'1', u'text1') 
(u'code', u'somet text', u'integer', u'2', u'text2') 
(u'code', u'somet text', u'integer', u'3', u'text3') 
(u'code', u'somet text', u'integer', u'4', u'text4') 
(u'code', u'somet text', u'integer', u'5', u'text5') 

我一直在使用一個for循環試過,但我結束了這一點:

((u'code', u'somet text', u'integer'), (u'1', u'text1')) 
((u'code', u'somet text', u'integer'), (u'2', u'text2')) 
((u'code', u'somet text', u'integer'), (u'3', u'text3')) 
((u'code', u'somet text', u'integer'), (u'4', u'text4')) 
((u'code', u'somet text', u'integer'), (u'5', u'text5')) 

此外,我使用的代碼根本感覺不到pythonic,my_list[3]可能長度不同。

my_list = (u'code', u'somet text', u'integer', [(u'1', u'text1'), (u'2', u'text2'), (u'3', u'text3'), (u'4', u'text4'), (u'5', u'text5')]) 
my_modified_list = my_list[0:3] 
last_part_of_my_list = my_list[3] 


for i in last_part_of_my_list: 
    print (my_modified_list, i) 
+0

@pstatix在Python指數從'0'開始,所以'my_list [3]'是元組(...)。 – godaygo

+0

@godaygo那是我的錯,算錯了...... – pstatix

回答

6

可以實現與+這種使用簡單的元組串聯:

nlists = [my_list[:-1] + tpl for tpl in my_list[-1]] 

[(u'code', u'somet text', u'integer', u'1', u'text1'), 
(u'code', u'somet text', u'integer', u'2', u'text2'), 
(u'code', u'somet text', u'integer', u'3', u'text3'), 
(u'code', u'somet text', u'integer', u'4', u'text4'), 
(u'code', u'somet text', u'integer', u'5', u'text5')] 
+0

啊,非常整齊,謝謝! – destinychoice

0

首先解開你的元組: a,b,c,d = my_list 這當然,假定4個元素正是你的元組,否則你會得到一個例外。 然後遍歷d:

for d1,d2 in d: print('({},{},{},{},{})'.format(a,b,c,d1,d2))

+0

我真的不會去格式化這一個。 – destinychoice

0

你可以只遍歷並與operator+加入他們:

fixed = my_list[:3] # this becomes (u'code', u'somet text', u'integer') 
new_list = [fixed + x for x in my_list[3]] # list comprehension to build new list 

您必須在您的術語小心。你叫你的變量my_list,但圍繞變量的全部內容的()使它變成tuple而不是list。然而,您的my_list[3]listtuples。這兩個容器都支持連接的operator+

因此,使用該解決方案(這是Python的並與工作正大小my_list[3]),你可以把它讀作:

new_listfixed變量的列表,以及每個元素在當前元素my_list[3]

根據您目前的數據你會得到一個list(再次,與[]):

[(u'code', u'somet text', u'integer', u'1', u'text1'), 
(u'code', u'somet text', u'integer', u'2', u'text2'), 
(u'code', u'somet text', u'integer', u'3', u'text3'), 
(u'code', u'somet text', u'integer', u'4', u'text4'), 
(u'code', u'somet text', u'integer', u'5', u'text5')] 
0

你可以試試這個:

my_list = (u'code', u'somet text', u'integer', [(u'1', u'text1'), (u'2', u'text2'), (u'3', u'text3'), (u'4', u'text4'), (u'5', u'text5')]) 
new_list = [(my_list[0], my_list[1], my_list[2], i[0], i[-1]) for i in my_list[3:][0]] 
0

你也可以試試這個:

from itertools import repeat 

my_list = (u'code', u'somet text', u'integer', [(u'1', u'text1'), (u'2', u'text2'), (u'3', u'text3'), (u'4', u'text4'), (u'5', u'text5')]) 

result = [x + y for x, y in zip(repeat(my_list[:3], len(my_list[3])), my_list[3])] 

print(result) 

,輸出:

[('code', 'somet text', 'integer', '1', 'text1'), 
('code', 'somet text', 'integer', '2', 'text2'), 
('code', 'somet text', 'integer', '3', 'text3'), 
('code', 'somet text', 'integer', '4', 'text4'), 
('code', 'somet text', 'integer', '5', 'text5')] 
0

您也可以嘗試不循環,並在短短的一行沒有導入任何外部模塊或複雜邏輯,這裏是lambda方法:

my_list = (u'code', u'somet text', u'integer', [(u'1', u'text1'), (u'2', u'text2'), (u'3', u'text3'), (u'4', u'text4'), (u'5', u'text5')]) 

print((list(map(lambda v:list(map(lambda y:(y+my_list[:3]),v)),my_list[3:])))) 

輸出:

[[('1', 'text1', 'code', 'somet text', 'integer'), ('2', 'text2', 'code', 'somet text', 'integer'), ('3', 'text3', 'code', 'somet text', 'integer'), ('4', 'text4', 'code', 'somet text', 'integer'), ('5', 'text5', 'code', 'somet text', 'integer')]]