将列表副本扩展为一行

时间:2016-02-24 20:12:31

标签: python

执行以下操作时:

a = {'a': 1, 'b':3, 'c': 5}
b = [2,4,6]
c = list(b)
c.extend(a.values())
print c

按照我的预期打印出[2, 4, 6, 1, 5, 3],但当我尝试在一行中执行列表复制和扩展时:

a = {'a': 1, 'b':3, 'c': 5}
b = [2,4,6]
d = list(b).extend(a.values()) 
print d

打印None。为什么这些不同?

3 个答案:

答案 0 :(得分:2)

因为list.extend()没有返回修改后的列表,而是对列表本身进行操作。

我想你可能想重用d。如果您想在扩展后创建一个新的d来保存结果并在一行中执行,请尝试:

a = {'a': 1, 'b':3, 'c': 5}
b = [2,4,6]
d = list(b) + list(a.values()) 
print d

需要注意的两点:

  1. dictionary.value()返回视图对象,但不返回普通列表
  2. 默认Python词典中的值/键是随机排序

答案 1 :(得分:1)

您甚至不需要制作变量dextend()会扩展列表,所以只需使用它:

a = {'a': 1, 'b':3, 'c': 5}
b = [2,4,6]
b.extend(a.values()) 
print b

这将为您提供所需的输出:[2, 4, 6, 5, 3, 1]

修改 根据OP,他希望b保持不变。您需要做的就是复制b然后再扩展它。你可以这样做:

a = {'a': 1, 'b':3, 'c': 5}
b = [2,4,6]
c = b[:]
c.extend(a.values()) 
print c

答案 2 :(得分:1)

您为d变量分配的内容是列表(b).extend函数的结果。此方法不返回任何内容 - 它扩展了现有的可变对象。 list(b)已被修改但由于你没有将它保存在任何地方,语句将不起作用。