我有两个清单
list1 = ["john", "kelvin", "harry", "rob", "jenny", "donne", "justin", "sam", "peter", "kitty"]
list2 = ["radha", "mohan", "pankaj", "sikha", "samarth"]
我希望合并这两个列表的方式是我得到一个字典列表,其中list1中应该有两个人,list2中应该有一个人。
example = [{"john", "kelvin", "radha"}, {"harry", "rob", "mohan"}, ......]
答案 0 :(得分:1)
以下是您的示例输入应该起作用的内容:
list1 = ["john", "kelvin", "harry", "rob", "jenny", "donne", "justin", "sam", "peter", "kitty"]
list2 = ["radha", "mohan", "pankaj", "sikha", "samarth"]
list3 = []
for i in xrange(len(list2)):
temp_list = [list1[2*i], list1[1+(2*i)], list2[i]]
list3.append(temp_list)
print list3
为python 2.x
工作,只需更改print
语句,使其在python 3.x
干杯
这是输出:
[['john', 'kelvin', 'radha'], ['harry', 'rob', 'mohan'], ['jenny', 'donne', 'pankaj'], ['justin', 'sam', 'sikha'], ['peter', 'kitty', 'samarth']]
答案 1 :(得分:1)
包含2 + 1个元素的集合列表:
ls1 = list("ABCDEF")
ls2 = list("123")
iterls1 = iter(ls1)
ls3 = [set(x) for x in zip(iterls1, iterls1, ls2)]
print(ls3)
# [{'A', '1', 'B'}, {'2', 'D', 'C'}, {'3', 'F', 'E'}]
答案 2 :(得分:0)
所以如你所说的那样制作一个列表实际上最终会成为一个集合列表(仅提及它)。
output = []
for i in list2:
output.append({i, list1.pop(), list1.pop()})
如果您想要嵌套列表,只需将{}
括号更改为[]
。
此外,这将清空list1,因此如果您选择使用此方式并稍后需要list1
,则值得在内存中保留副本。
编辑:
正如评论中所指出的,看起来你想从list1
开始迭代。在这种情况下,请使用list1.pop(0)
,其中0
是从列表中弹出的索引。
答案 3 :(得分:0)
list1 = ["john", "kelvin", "harry", "rob", "jenny", "donne", "justin", "sam", "peter", "kitty"]
list2 = ["radha", "mohan", "pankaj", "sikha", "samarth"]
list3 = [[list1[2*i],list1[2*i+1],list2[i]] for i in xrange(len(list2))]
这应该这样做,使用列表理解它看起来更整洁。
答案 4 :(得分:0)
VPfB的答案实际上是pythonic,很好地使用了iter
这是同一精神的另一种变化:
list3 = list(map(set, zip(list1[::2], list1[1::2], list2)))
主要区别是:
map
代替列表推导将zip
生成的元组转换为集合。iter
。