如何解决Python列出切片和+ =运算符
给出以下示例:
array = [1,2,3,4,0]
In: array[0] += 2
Out: 3
In: array[1:3] += 2
Out: TypeError: 'int' object is not iterable
In: array[1:3] += [100,100]
Out: [1,100,5]
有人可以解释一下为什么最后两个示例不会返回类似[1,102,103,0]的信息,并且如果可以用一个简单的切片而不是使用for循环来完成此操作的话……
解决方法
使用slice运算符时,它指的是列表的子部分,因此对其进行操作也需要一个列表(我们可以将list
上的“ add”运算符与list
一起使用,而不是int
,与某些其他语言不同)。
因此,以下内容:
array[1:3] += 2
投掷:
TypeError: 'int' object is not iterable
因为2
不是列表(实际上是可迭代的,比list
更通用)。
但是:
array[1:3] += [100,100]
根据索引工作并在3
的中间(索引array
)中添加(实际上附加)两个元素:
[3,2,3,100,4,0]
不按要求使用for
循环
如果要添加到切片中的值:
array = [1,0]
array.__setitem__(slice(1,3),[x+2 for x in array[1:3]])
# [1,102,103,0]
print(array)
也可以写成:
array = [1,0]
def apply_on_slice(lst,start,end,callable):
array.__setitem__(slice(start,end),[callable(x) for x in array[start:end]])
apply_on_slice(array,1,lambda x : x + 100)
# [1,0]
print(array)
使用for循环
还有其他一些不错的选择:
array[1:3] = (x+2 for x in array[1:3])
或者,当然,使用常规的for循环比使用两次切片更有效:
for i in range(1,3):
array[i] += 2
,
您显然希望在R和其他语言中(以及在Python中,在numpy
数组等中)以元素为单位应用该操作。例如,将2加到一个列表中将向该列表的每个元素添加2个。这不是Python列表的工作方式:您询问的每个语句在运算符的每一侧构造一个 one 对象(一个列表或列表切片,一个列表元素,一个整数),然后应用该操作(仅一次)到这两个对象。因此,如果“添加”两个列表,则会串联在一起;如果尝试添加列表和一个int,则会出现TypeError等。详细信息可以在@Aviv的答案中阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。