切片操作似乎不一致.在某些情况下,切片包括第k个值,有时则不包括.

Rotate.py

def rotate(nums, k):
    temp = nums[0:k+1]
    del nums[0:k+1]
    nums.extend(temp)

test_Rotate.py

import unittest
from rotate_array import rotate

class TestRotateArray(unittest.TestCase):
    def test_rotate_array2(self):
        nums= [-1, -100, 3, 99]
        k = 2
        expected = [3, 99, -1, -100]
        rotate(nums, k)
        self.assertListEqual(nums, expected)
    
    def test_rotate_array(self):
        nums= [1,2,3,4,5,6,7]
        k = 3
        expected = [5,6,7,1,2,3,4]
        rotate(nums, k)
        self.assertListEqual(nums, expected)

if __name__ == '__main__':
        unittest.main()

第一个测试将失败,第二个测试将在我执行Nums[:k+1]时通过. 测试失败的数字数组:[99,-1,-100,3]

当我使用Nums[0:k]时,第一个通过,第二个不通过. 测试失败的数字数组:[4,5,6,7,1,2,3]

我正在研究的整个问题都可以在here

推荐答案

因此,您的旋转第一个测试的实现不会通过,因为您推后了前三个元素[0:k+1],而您想推入列表顶部的最后两个数字,因此:

def rotate(nums, k):
  return nums[-k:] + nums[0:-k]

在这种情况下,您必须记住重新分配nums = rotate(nums, k).如果您想编写有副作用的方法,请记住将_放在方法的末尾,这是典型的Python约定.

Python相关问答推荐

如何将uint 16表示为float 16

解析讨论论坛只给我第一个用户 comments ,但没有给我其他用户回复

在Python中,什么表达相当于0x1.0p-53?

如何让pyparparsing匹配1天或2天,但1天和2天失败?

指示组内的rejected_time是否在creation_timestamp后5分钟内

如何让我的Tkinter应用程序适合整个窗口,无论大小如何?

如何使用矩阵在sklearn中同时对每个列执行matthews_corrcoef?

如何在具有重复数据的pandas中对groupby进行总和,同时保留其他列

@Property方法上的inspect.getmembers出现意外行为,引发异常

如何在虚拟Python环境中运行Python程序?

删除字符串中第一次出现单词后的所有内容

如何在solve()之后获得症状上的等式的值

在np数组上实现无重叠的二维滑动窗口

NumPy中条件嵌套for循环的向量化

python中字符串的条件替换

提取相关行的最快方法—pandas

在单个对象中解析多个Python数据帧

python中的解释会在后台调用函数吗?

与命令行相比,相同的Python代码在Companyter Notebook中运行速度慢20倍

手动设置seborn/matplotlib散点图连续变量图例中显示的值