我知道你可以在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 + 7r[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']
我错了什么? 输出:
答案 0 :(得分:1)
想一想:
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'
开头。
答案 1 :(得分:1)
>>> 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]
您要将r[4:7]
分配给r[2:4]
只有2个的3个元素。
在我发布的代码中:
>>> >>> 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']
所以最后的结果是:
1 APPLE
2 BANANA
DOWN:
1 ORANGE
6 GRAPES
答案 2 :(得分:1)
切片工作正常。您正在更换不同长度的切片。 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