【发布时间】:2012-08-18 04:54:31
【问题描述】:
可能重复:
What is the difference between slice assignment that slices the whole list and direct assignment?
我没有钱上学,所以我一边在高速公路上的收费站轮班工作,一边自学一些 Python(长时间没有顾客)。 (顺便说一句:Coursera 应该翻译成所有语言...)
我在这里读到如果我有一个列表l:
l = ['a', '', 'b']
我想像这样过滤掉空字符串:
l = [c for c in l if c]
或者像这样:
l = filter(lambda x: x, l)
建议改为这样做:
l[:] = ... # either method 1 or method 2 above
不要“丢失”对第一个 l 的引用,尤其是在其他变量指向它的情况下。
我的问题:
为什么在这种情况下
l[:]表示“l的内容”,允许专门重新分配给“相同”l,而在其他地方我认为它是“相同大小的切片” ",方便为我创建一个 l 的副本?我是否误解如何完全使用
l[:]进行相同列表重新分配?
我想如果我有一个l 并且我要求一个l[:],那么后者是原始l 的实际副本?
参考:《学习Python》-> 有很多种 复制列表的方法,包括使用内置列表函数和标准库 复制模块。也许最常见的方法是从头到尾切片
谢谢!
【问题讨论】:
-
不完全。据我所知,这基本上是在问 l[:] 和 l[:] = ... 之间有什么区别。
-
@MartijnPieters 是的,我认为这可能与该问题相去甚远,足以被视为一个有用的独立问题
-
@MartijnPieters 我真的不认为这个问题是完全重复的。也许可以用措辞来强调 x = l[:] 和 l[:] = x 之间的区别,但这绝对是一个不同的问题。您可以通过查看另一个问题的答案来测试这一点,并注意到他们都不能充分回答这个问题。
标签: python list-comprehension slice