使用切片交换索引?
Swap indexes using slices?
我知道您可以在 Python
中交换 2 个单一索引
r = ['1', '2', '3', '4', '5', '6', '7', '8']
r[2], r[4] = r[4], r[2]
输出:
['1', '2', '5', '4', '3', '6', '7', '8']
但为什么不能在 python 中交换 2 个索引片?
r = ['1', '2', '3', '4', '5', '6', '7', '8']
我想将 r 中的数字 3 + 4 与 5 + 6 + 7 交换:
r[2:4], r[4:7] = r[4:7], r[2:4]
输出:
['1', '2', '5', '6', '3', '4', '7', '8']
预期输出:
['1', '2', '5', '6', '7', '3', '4', '8']
我做错了什么?
输出:
想想这个:
r[2:4], r[4:7] = r[4:7], r[2:4]
与此类似:
original_r = list(r)
r[2:4] = original_r[4:7]
r[4:7] = original_r[2:4]
因此,当它到达第三行时,第 4 个元素不再是您认为的那样...您将 '3', '4'
替换为 '5', '6', '7'
,现在[4:7]
切片以 '7'
.
开头
>>> r = ['1', '2', '3', '4', '5', '6', '7', '8']
>>> r[2:5], r[5:7] = r[4:7], r[2:4]
>>> r
['1', '2', '5', '6', '7', '3', '4', '8']
在您的代码中:
>>> r[2:4], r[4:7] = r[4:7], r[2:4]
您正在将具有 3 个元素的 r[4:7]
分配给只有 2 个元素的 r[2:4]
。
在我发布的代码中:
>>> >>> r[2:5], r[5:7] = r[4:7], r[2:4]
r[4:7]
即 ['5', '6', '7']
,替换
r[2:5]
即 ['3', '4', '5']
r
导致 ['1', '2', '5', '6', '7', '6', '7', '8']
然后:
r[2:4]
替换为 ['3', '4']
r[5:7]
即 ['6', '7']
所以最终结果是:
['1', '2', '5', '6', '7', '3', '4', '8']
切片工作正常。您正在替换不同长度的切片。 r[2:4]
是两项,r[4:7]
是三项。
>>> r = ['1', '2', '3', '4', '5', '6', '7', '8']
>>> r[2:4]
['3', '4']
>>> r[4:7]
['5', '6', '7']
所以当['3', '4']
被替换时,只能得到['5', '6']
,而当['5', '6', '7']
被替换时,只能得到['3', '4']
。所以你有 ['1', '2',
,接下来的两个元素是 ['5', '6', '7']
的前两个元素,也就是 ['5', '6'
,然后是 ['3', '4'
的两个元素,然后是剩余的'7', '8']
.
如果要替换切片,必须在正确的位置开始切片,并在数组中为每个切片分配适当的大小:
>>> r = ['1', '2', '3', '4', '5', '6', '7', '8']
>>> r[2:5], r[5:7] = r[4:7], r[2:4]
>>> r
['1', '2', '5', '6', '7', '3', '4', '8']
old index: 4 5 6 2 3
new index: 2 3 4 5 6
我知道您可以在 Python
中交换 2 个单一索引r = ['1', '2', '3', '4', '5', '6', '7', '8']
r[2], r[4] = r[4], r[2]
输出:
['1', '2', '5', '4', '3', '6', '7', '8']
但为什么不能在 python 中交换 2 个索引片?
r = ['1', '2', '3', '4', '5', '6', '7', '8']
我想将 r 中的数字 3 + 4 与 5 + 6 + 7 交换:
r[2:4], r[4:7] = r[4:7], r[2:4]
输出:
['1', '2', '5', '6', '3', '4', '7', '8']
预期输出:
['1', '2', '5', '6', '7', '3', '4', '8']
我做错了什么? 输出:
想想这个:
r[2:4], r[4:7] = r[4:7], r[2:4]
与此类似:
original_r = list(r)
r[2:4] = original_r[4:7]
r[4:7] = original_r[2:4]
因此,当它到达第三行时,第 4 个元素不再是您认为的那样...您将 '3', '4'
替换为 '5', '6', '7'
,现在[4:7]
切片以 '7'
.
>>> r = ['1', '2', '3', '4', '5', '6', '7', '8']
>>> r[2:5], r[5:7] = r[4:7], r[2:4]
>>> r
['1', '2', '5', '6', '7', '3', '4', '8']
在您的代码中:
>>> r[2:4], r[4:7] = r[4:7], r[2:4]
您正在将具有 3 个元素的 r[4:7]
分配给只有 2 个元素的 r[2:4]
。
在我发布的代码中:
>>> >>> r[2:5], r[5:7] = r[4:7], r[2:4]
r[4:7]
即 ['5', '6', '7']
,替换
r[2:5]
即 ['3', '4', '5']
r
导致 ['1', '2', '5', '6', '7', '6', '7', '8']
然后:
r[2:4]
替换为 ['3', '4']
r[5:7]
即 ['6', '7']
所以最终结果是:
['1', '2', '5', '6', '7', '3', '4', '8']
切片工作正常。您正在替换不同长度的切片。 r[2:4]
是两项,r[4:7]
是三项。
>>> r = ['1', '2', '3', '4', '5', '6', '7', '8']
>>> r[2:4]
['3', '4']
>>> r[4:7]
['5', '6', '7']
所以当['3', '4']
被替换时,只能得到['5', '6']
,而当['5', '6', '7']
被替换时,只能得到['3', '4']
。所以你有 ['1', '2',
,接下来的两个元素是 ['5', '6', '7']
的前两个元素,也就是 ['5', '6'
,然后是 ['3', '4'
的两个元素,然后是剩余的'7', '8']
.
如果要替换切片,必须在正确的位置开始切片,并在数组中为每个切片分配适当的大小:
>>> r = ['1', '2', '3', '4', '5', '6', '7', '8']
>>> r[2:5], r[5:7] = r[4:7], r[2:4]
>>> r
['1', '2', '5', '6', '7', '3', '4', '8']
old index: 4 5 6 2 3
new index: 2 3 4 5 6