修改包含元组的列表
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了修改包含元组的列表相关的知识,希望对你有一定的参考价值。
我有一个包含元组的列表,如下所示:
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)
答案
您可以使用与+
的简单元组串联来实现此目的:
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')]
另一答案
首先解压缩你的元组:a,b,c,d = my_list
当然,这假设4个元素与你的元组完全相同,否则你会得到一个异常。然后迭代d:
for d1,d2 in d:
print('({},{},{},{},{})'.format(a,b,c,d1,d2))
另一答案
你可以试试这个:
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]]
另一答案
您可以迭代并使用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_list
是fixed
变量的列表加上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')]
另一答案
你也可以试试这个:
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')]
另一答案
您也可以在没有循环的情况下尝试,只需一行而无需导入任何外部模块或复杂逻辑,这是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')]]
以上是关于修改包含元组的列表的主要内容,如果未能解决你的问题,请参考以下文章