我在词典中有列表:
Number_of_lists=3 #user sets this value, can be any positive integer
My_list={}
for j in range(1,Number_of_lists+1):
My_list[j]=[(x,y,z)]
Number_of_lists
是用户设置的变量。如果事先不知道用户设置的值,我想最终得到所有字典列表的合并列表。例如,如果Number_of_lists=3
且相应的列表为My_list[1]=[(1,2,3)]
,My_list[2]=[(4,5,6)]
,My_list[3]=[(7,8,9)]
,则结果为:
All_my_lists=My_list[1]+My_list[2]+My_list[3]
其中:
All_my_lists=[(1,2,3),(4,5,6),(7,8,9)]
。
所以我要做的就是尽可能自动执行上述程序:
Number_of_lists=n #where n can be any positive integer
我现在有点迷失,试图使用迭代器添加列表并始终失败。我是一个蟒蛇初学者,这是我的一个爱好,所以如果你回答请解释你的答案中的一切我正在做这个学习,我不是要求你做我的作业:)
@codebox(请看下面的评论)正确地指出我的代码中显示的My_List
实际上是字典而不是列表。如果您使用任何代码,请小心。
答案 0 :(得分:1)
如果您只关心最终列表,并且实际上不需要My_list
(您应该重命名,因为它是一本字典!)那么您可以这样做:
Number_of_lists=3
result = []
for j in range(1,Number_of_lists+1):
result += (x,y,z)
答案 1 :(得分:1)
使用列表理解:
>>> Number_of_lists=3
>>> My_list={}
>>> for j in range(1,Number_of_lists+1):
My_list[j]=(j,j,j)
>>> All_my_lists=[My_list[x] for x in My_list]
>>> print(All_my_lists)
[(1, 1, 1), (2, 2, 2), (3, 3, 3)]
All_my_lists=[My_list[x] for x in My_list]
相当于:
All_my_lists=[]
for key in My_list:
All_my_lists.append(My_list[key])
答案 2 :(得分:1)
首先生成All_my_lists
可能更容易,然后My_list
生成。
All_my_lists
使用list comprehension和range()
生成All_my_lists
:
>>> num = 3 # for brevity, I changed Number_of_lists to num
>>> All_my_lists = [tuple(range(num*i + 1, num*(i+1) + 1)) for i in range(0, num)]
>>> All_my_lists
[(1, 2, 3), (4, 5, 6), (7, 8, 9)]
或者,我们可以使用itertools recipe列表中的grouper()
函数,这样可以生成更清晰的代码:
>>> All_my_lists = list(grouper(num, range(1, num*3+1)))
>>> All_my_lists
[(1, 2, 3), (4, 5, 6), (7, 8, 9)]
My_lists
然后我们可以使用dict
constructor以及列表理解和enumerate()
从My_list
构建派生All_my_list
:
>>> My_lists = dict((i+1, [v]) for i,v in enumerate(All_my_lists))
>>> My_lists
{1: [(1, 2, 3)], 2: [(4, 5, 6)], 3: [(7, 8, 9)]}
>>> My_lists[1]
[(1, 2, 3)]
>>> My_lists[2]
[(4, 5, 6)]
>>> My_lists[3]
[(7, 8, 9)]
答案 3 :(得分:1)
您可以尝试使用Number_of_lists
将range
转换为一系列密钥,然后使用map
选择字典,尝试更实用的方法:
My_list={1:[1,2,3], 2:[4,5,6], 3:[7,8,9], 4:[10,11,12]}
Number_of_lists=3
All_my_lists=map(lambda x: tuple(My_list[x]), range(1, Number_of_lists+1))
示例输出:
>>> All_my_lists
[(1, 2, 3), (4, 5, 6), (7, 8, 9)]