我有一个包含元组的列表,如下所示:
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 :(得分: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_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')]
答案 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')]]