修改包含元组的列表

时间:2017-12-18 14:13:39

标签: python python-2.7 tuples

我有一个包含元组的列表,如下所示:

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)

6 个答案:

答案 0 :(得分: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')]

答案 1 :(得分:0)

首先打开你的元组: a,b,c,d = my_list 当然,这假设4个元素与您的元组完全相同,否则您将获得异常。 然后迭代d:

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

答案 2 :(得分: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]list tuples。这两个容器都支持operator+进行连接。

因此,使用此解决方案( Pythonic 并使用n大小的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')]

答案 3 :(得分: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]]

答案 4 :(得分: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')]

答案 5 :(得分: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')]]