Python:获取两个列表并通过合并它们来创建一个新列表

时间:2017-06-02 09:21:22

标签: python algorithm python-2.7 list python-3.x

我有两个清单

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"}, ......]

5 个答案:

答案 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