【问题标题】:Difference in a[:] and a in an expression表达式中 a[:] 和 a 的区别
【发布时间】:2019-06-27 06:57:01
【问题描述】:

我知道a[:]a 在分配给变量时的区别以及切片分配的特殊情况。

假设,

a=[1,2,3,4,5]  

以下两种说法有什么区别?

b=a[:]+[6,7,8,9,10] #1   
b=a+[6,7,8,9,10] #2  

在这两种情况下,ab 在末尾都有相同的值。

我已经参考了以下链接 -

When and why to use [:] in python

Understanding slice notation

Python why would you use [:] over =

他们没有提到他们在表达上的差异。

【问题讨论】:

  • [:] 选择列表的所有值,它是 python 列表中的一个切片字符,但是,如果 : 之后有一个数字,它会从该索引或该索引切片,具体取决于: 之前或之后的位置。
  • 第一个语句首先创建了a 的(不必要的)副本。第二个没有。

标签: python list slice


【解决方案1】:

a[:] 抓取列表的完整部分 - 在这种情况下,它没有任何区别,因为您正在分配一个新列表(尽管它确实复制了列表,因此它在规模上比较慢)。

# create the list.
>>> a = [1, 2, 3, 4, 5]
# see its address
>>> id(a)
4349194440
# see the (different) address of a copy
>>> id(a[:])
4350338120
# reassign the entire list using slice syntax
>>> a[:] = [5, 6, 7]
>>> a
[5, 6, 7]
# still the same first ID though
>>> id(a)
4349194440
>>>

【讨论】:

    【解决方案2】:

    在 python 列表切片中,a[:]a 仅在其 id 上有所不同,因为 a[:] 正在另一个地址位置制作 a 的精确副本。

    另外考虑python不可变字符串切片a[:]a没有区别。都指向同一个地址位置。

    【讨论】:

      【解决方案3】:
      a=[1,2,3,4,5] 
      b=a[:]+[6,7,8,9,10] #1  
      b=a+[6,7,8,9,10] #2 
      

      Case-1 a[:] ,表示您正在对序列进行切片,序列可以是字符串、列表等任何内容。基本上这被读作a[start:end:steps],其中start @987654325 @ 是我们的索引值,steps 是跳转次数。如果我们不提供任何值,则默认情况下start = 0 AND end = 序列的最后一个元素 AND steps = 1。因此,在您的情况下,您只需获取列表 a 的整个元素。

      Case-2 a ,简单来说就是整个a

      结论:- 在a[:]的帮助下,您可以获得所需的元素。

      示例-->>

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

      希望对你有帮助。

      【讨论】:

        猜你喜欢
        • 2011-06-22
        • 2010-10-09
        • 2022-01-12
        • 2016-02-17
        • 1970-01-01
        • 1970-01-01
        • 2011-10-04
        • 2016-03-29
        相关资源
        最近更新 更多