如何传播python数组[重复]

Posted

技术标签:

【中文标题】如何传播python数组[重复]【英文标题】:How to spread a python array [duplicate] 【发布时间】:2018-07-05 04:41:11 【问题描述】:

在 JS 中我可以做到这一点

const a = [1,2,3,4]
const b = [10, ...a]
console.log(b) // [10,1,2,3,4]

python中有没有类似的方法?

【问题讨论】:

只需添加它们:b = [10] + a 【参考方案1】:

正如 Alexander 在 cmets 中指出的那样,列表添加是串联。

a = [1,2,3,4]
b = [10] + a  # N.B. that this is NOT `10 + a`
# [10, 1, 2, 3, 4]

你也可以使用list.extend

a = [1,2,3,4]
b = [10]
b.extend(a)
# b is [10, 1, 2, 3, 4]

和较新版本的 Python 允许您(ab)使用 splat (*) 运算符。

b = [10, *a]
# [10, 1, 2, 3, 4]

不过,您的选择可能反映了改变(或不改变)现有列表的需要。

a = [1,2,3,4]
b = [10]
DONTCHANGE = b

b = b + a  # (or b += a)
# DONTCHANGE stays [10]
# b is assigned to the new list [10, 1, 2, 3, 4]

b = [*b, *a]
# same as above

b.extend(a)
# DONTCHANGE is now [10, 1, 2, 3, 4]! Uh oh!
# b is too, of course...

【讨论】:

extend和[]+[]有区别吗 @TylerCowan 前者修改一个列表并返回None,后者返回一个包含所有元素的新列表。否则没有。 最后一个例子只适用于python3 [] + [] 比 .extend() 占用更多内存,因为它是一个两步过程 @Mincho 这可能是真的,但可能不是你想的原因。当然不是因为这是一个两步的过程。在c = a + b 之后,您有三个列表,abc。每个都必须保存在内存中,直到超出范围(除非您 del a; del b)。在a.extend(b) 之后,您只有两个列表——ab。也就是说:最大的区别仍然是list.extend 改变了现有列表,而list.__add__ 产生了一个新列表。【参考方案2】:

这个问题没有明确你想要达到的目标。

要复制该操作,您可以使用 Python 列表 extend 方法,该方法会附加您作为参数传递的列表中的项目:

>>> list_one = [1,2,3]
>>> list_two = [4,5,6]
>>> list_one.extend(list_two)
>>> list_one
[1, 2, 3, 4, 5, 6]

如果您需要在特定插入点扩展列表,您可以使用列表切片:

>>> l = [1, 2, 3, 4, 5]
>>> l[2:2] = ['a', 'b', 'c']
>>> l
[1, 2, 'a', 'b', 'c', 3, 4, 5]

【讨论】:

【参考方案3】:

Python 的列表对象有.extend 函数。

你可以这样使用它:

    a = [1, 2, 3, 4]
    b = [10]
    b.extend(a)
    print(b)

【讨论】:

呸,我错过了一个 ;) 可能值得特别指出 list.extend 返回 None,所以不要使用 b = b.extend(a)。这是 Python 初学者的常见错误。 @AdamSmith 了解哪些类型是可变/不可变的也是值得的。在 python 中,列表是可变的。 好点,也是我自己的回答中缺少的点。谢谢!

以上是关于如何传播python数组[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何传播具有重复标识符的列?

如何将多个变量的重复测量值传播为宽格式?

JavaScript - 如何合并/附加到对象/数组 - ReactJS - 传播语法

如何将对象作为方法输入参数而不是作为参数数组传播?

将变量的值传播到循环外[重复]

不传播的原因是啥(es 6传播运算符)javascript错误对象[重复]