理解列表的python语法

时间:2018-01-09 05:43:37

标签: python

list = sorted(set(list))
list[:] = sorted(set(list))
list[::] = sorted(set(list))

我是Python的新手,我注意到的第一件事是语法简洁,但不明显。

例如,目前尚不清楚上述三个陈述中发生了什么。我运行它们并获得了一些结果,似乎语句1没有更新列表,而语句2和语句3是。但是,我相信还有更多的事情要发生。

上述每项任务的含义是什么?

1 个答案:

答案 0 :(得分:3)

2和3执行相同操作(切片的step参数是可选的,并且这两个切片都使用step的默认1),但它们本身都与1.切片分配(lst[:] = ...改变原始对象,而常见作业(lst = ...)将变量重新绑定到对象。

>>> lst = [3,3,2,2,1,1]
>>> id(lst)
139793325565704
>>> lst[:] = sorted(set(lst))
>>> lst
[1, 2, 3]
>>> id(lst)
139793325565704  # same object
>>> lst = sorted(set(lst))
>>> id(lst)
139793325524744  # different object

值得注意的是,切片赋值可以在rhs上具有任何可迭代(对于部分切片,它们的元素数必须与切片的长度匹配):

>>> lst = [1,2,3]
>>> lst[1:] = 'ab'
>>> lst
[1, 'a', 'b']

有关详细信息,请参阅the slice docs中的一些内容。