300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > python中list是什么意思_python中list和list [:]有什么区别?

python中list是什么意思_python中list和list [:]有什么区别?

时间:2023-06-25 07:01:20

相关推荐

python中list是什么意思_python中list和list [:]有什么区别?

python中list和list [:]有什么区别?

python中的list和list[:]之间的区别是什么?

Jing asked -02-04T07:22:15Z

7个解决方案

73 votes

阅读时,list是对原始列表的引用,并且list[:]浅表复制了该列表。

分配时,list(重新)绑定名称和list[:]切片分配,替换列表中以前的名称。

另外,请勿使用list作为名称,因为它会掩盖内置文件。

Ignacio Vazquez-Abrams answered -02-04T07:22:39Z

22 votes

后者是对列表副本的引用,而不是对列表的引用。 因此,它非常有用。

>>> li = [1,2,3]

>>> li2 = li

>>> li3 = li[:]

>>> li2[0] = 0

>>> li

[0, 2, 3]

>>> li3

[1, 2, 3]

Matthew Mitchell answered -02-04T07:22:59Z

3 votes

要将第一个:应用于变量,将创建对原始列表的引用。第二个list[i]将创建一个浅表副本。

例如:

foo = [1,2,3]

bar = foo

foo[0] = 4

bar和foo现在将是:

[4,2,3]

但:

foo = [1,2,3]

bar = foo[:]

foo[0] = 4

结果将是:

bar == [1,2,3]

foo == [4,2,3]

:是切片。

Glycerine answered -02-04T07:23:41Z

3 votes

但是,如果列表元素是列表本身,那么即使是list1 = list[:]也会出现问题。 考虑:

>>> a = [[1,2,3],[4,5,6],[7,8,9]]

>>> b = a[:]

>>> b[0].remove(2)

>>> b

[[1, 3], [4, 5, 6], [7, 8, 9]]

>>> a

[[1, 3], [4, 5, 6], [7, 8, 9]]

发生这种情况是因为复制到b的每个列表元素都是列表本身,并且列表的这种复制涉及正常for所发生的相同问题。我发现的最快捷的方法是以这种方式显式复制每个列表元素:

>>> a = [[1,2,3],[4,5,6],[7,8,9]]

>>> b=[[j for j in i] for i in a]

>>> b

[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

>>> b[0].remove(2)

>>> b

[[1, 3], [4, 5, 6], [7, 8, 9]]

>>> a

[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

当然,对于嵌套列表中每增加一个嵌套度,复制代码就会通过附加的内联for循环加深。

Abhranil Das answered -02-04T07:24:11Z

3 votes

li [:]创建原始列表的副本。 但是它没有引用相同的列表对象。 因此,您不必冒险通过更改由li [:]创建的副本来更改原始列表。

例如:

>>> list1 = [1,2,3]

>>> list2 = list1

>>> list3 = list1[:]

>>> list1[0] = 4

>>> list2

[4, 2, 3]

>>> list3

[1, 2, 3]

此处list2通过更改list1进行了更改,但list3不变。

tarashish answered -02-04T07:24:41Z

2 votes

另一个有用的示例是为列表和列表[:]分配其他类型时。 例如,

l = [1,2,3]

a = numpy.array([4,5,6])

l = a

print(l)

结果是一个numpy数组:

array([4, 5, 6])

而,

l = [1,2,3]

a = numpy.array([4,5,6])

l[:] = a

print(l)

结果是一个列表:

[4, 5, 6]

Mohsen Abedin Nejad answered -02-04T07:25:13Z

1 votes

第一个引用原始列表。 第二个指向原始列表的副本。

看一下这个!

>>> a = [1, 2, 3]

>>> b = a

>>> c = a[:]

>>> a == b

True

>>> a is b

True

>>> a == c

True

>>> a is c

False

>>> a.__repr__

>>> a.__repr__()

'[1, 2, 3]'

>>> b.__repr__

>>> c.__repr__

请注意,a和b都指向地址0x7f87a9ba3688,而c指向地址0x7f87ad352988。

区别很明显。

a和b都引用原始列表对象。

而c指向(原始列表的)副本,因此它位于不同的位置。

Akash Adhikari answered -02-04T07:25:55Z

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。