Python 如何将列表向右移动一个元素[1、2、3、4]->;[4, 1, 2, 3] ? 左[1,2,3,4]->;[2, 3, 4, 1]?

Python 如何将列表向右移动一个元素[1、2、3、4]->;[4, 1, 2, 3] ? 左[1,2,3,4]->;[2, 3, 4, 1]?,python,python-3.x,Python,Python 3.x,我正在做一个基本的冒泡排序,我对编程还是很陌生,所以我的代码可能没有那么高效或者设计得很好。我的代码: elif n == -1: if numbers[n] > numbers[m]: for i in range(len(numbers) - 1): numbers2[i + 1] = numbers[i] and numbers[i] != numbers2[i + 1] print

我正在做一个基本的冒泡排序,我对编程还是很陌生,所以我的代码可能没有那么高效或者设计得很好。我的代码:

elif n == -1:
        if numbers[n] > numbers[m]:
            for i in range(len(numbers) - 1):
                numbers2[i + 1] = numbers[i] and numbers[i] != numbers2[i + 1]


            print (numbers)
            print (numbers2)
            print (n)
            print (m)
            print (i)

            if i == len(numbers)-1:
                numbers = numbers2
                n += 1
                m += 1
我在循环中遇到了一个错误,好像您输入:14232423123645643它将把23123向右推,但其余的数字将按降序排列。现在因为这是一个问题,我试图通过一个新的if语句来检查最后一个和第一个数字来解决这个问题,然后它必须将最后一个数字放在前面[2,1,3]-->[3,2,1]。但在执行此操作时,我使用了一个不带:-和数字[i]!=numbers2[i+1](参见问题),最后将整行数字更改为列表中的第一个数字

['23', '431', '63451', '234', '435']

['23', '23', '63451', '234', '435']
['23', '23', '63451', '234', '435']
-1
0
0
['23', '23', '23', '234', '435']
['23', '23', '23', '234', '435']
-1
0
1
['23', '23', '23', '23', '435']
['23', '23', '23', '23', '435']
-1
0
2
['23', '23', '23', '23', '23']
我添加了第二个列表,但随后我尝试了上面的代码,结果出现以下错误:

if numbers[n] > numbers[m]:
TypeError:“bool”和“str”实例之间不支持“>”


所以我想看看我是否可以用but代替and,但我什么也没找到。抱歉,这是一个很长的问题。

实现这一点的最简单方法是使用列表切片功能,如下所示:

向右移动

>>> my_list = [1, 2, 3, 4, 5]

>>> my_list[-1:] + my_list[:-1]
[5, 1, 2, 3, 4]
>>> my_list = [1, 2, 3, 4, 5]

>>> my_list[1:] + my_list[:1]
[2, 3, 4, 5, 1]
>>> from itertools import cycle
>>> my_list = [1, 2, 3, 4, 5]

>>> my_cycle = cycle(my_list[::-1])
>>> [next(my_cycle) for i in range(len(my_list)+1)][::-1][:-1]
[5, 1, 2, 3, 4]
>>> from itertools import cycle
>>> my_list = [1, 2, 3, 4, 5]

>>> my_cycle = cycle(my_list)
>>> [next(my_cycle) for i in range(len(my_list)+1)][1:]
[2, 3, 4, 5, 1]
向左移动

>>> my_list = [1, 2, 3, 4, 5]

>>> my_list[-1:] + my_list[:-1]
[5, 1, 2, 3, 4]
>>> my_list = [1, 2, 3, 4, 5]

>>> my_list[1:] + my_list[:1]
[2, 3, 4, 5, 1]
>>> from itertools import cycle
>>> my_list = [1, 2, 3, 4, 5]

>>> my_cycle = cycle(my_list[::-1])
>>> [next(my_cycle) for i in range(len(my_list)+1)][::-1][:-1]
[5, 1, 2, 3, 4]
>>> from itertools import cycle
>>> my_list = [1, 2, 3, 4, 5]

>>> my_cycle = cycle(my_list)
>>> [next(my_cycle) for i in range(len(my_list)+1)][1:]
[2, 3, 4, 5, 1]
您可以在单个自定义函数中加入这些逻辑,以向左和向右移动,如下所示:

def shift_list(my_list, shift_by):
    return my_list[shift_by:] + my_list[:shift_by]
在上述
shift\u列表
功能中,用于:

  • 左移:传递正整数
    n
    以左移
    n
  • 右移:将负整数
    -n
    传递到右移
    n
样本运行:

>>> my_list = [1, 2, 3, 4, 5]

# Shift left by "1" step
>>> shift_list(my_list, 1)
[2, 3, 4, 5, 1]

# Shift left by "2" step
>>> shift_list(my_list, 2)
[3, 4, 5, 1, 2]

# Shift right by "1" step
>>> shift_list(my_list, -1)
[5, 1, 2, 3, 4]

# Shift right by "2" step
>>> shift_list(my_list, -2)
[4, 5, 1, 2, 3]

作为备选方案,您还可以与列表理解一起使用。它比上述解决方案稍微复杂,但仍然比您的解决方案简单:

向右移动

>>> my_list = [1, 2, 3, 4, 5]

>>> my_list[-1:] + my_list[:-1]
[5, 1, 2, 3, 4]
>>> my_list = [1, 2, 3, 4, 5]

>>> my_list[1:] + my_list[:1]
[2, 3, 4, 5, 1]
>>> from itertools import cycle
>>> my_list = [1, 2, 3, 4, 5]

>>> my_cycle = cycle(my_list[::-1])
>>> [next(my_cycle) for i in range(len(my_list)+1)][::-1][:-1]
[5, 1, 2, 3, 4]
>>> from itertools import cycle
>>> my_list = [1, 2, 3, 4, 5]

>>> my_cycle = cycle(my_list)
>>> [next(my_cycle) for i in range(len(my_list)+1)][1:]
[2, 3, 4, 5, 1]
向左移动

>>> my_list = [1, 2, 3, 4, 5]

>>> my_list[-1:] + my_list[:-1]
[5, 1, 2, 3, 4]
>>> my_list = [1, 2, 3, 4, 5]

>>> my_list[1:] + my_list[:1]
[2, 3, 4, 5, 1]
>>> from itertools import cycle
>>> my_list = [1, 2, 3, 4, 5]

>>> my_cycle = cycle(my_list[::-1])
>>> [next(my_cycle) for i in range(len(my_list)+1)][::-1][:-1]
[5, 1, 2, 3, 4]
>>> from itertools import cycle
>>> my_list = [1, 2, 3, 4, 5]

>>> my_cycle = cycle(my_list)
>>> [next(my_cycle) for i in range(len(my_list)+1)][1:]
[2, 3, 4, 5, 1]

请花些时间创建一个只包含与您的问题直接相关的代码的。向我们展示您的所有代码会导致一个过长的问题。首先,将replace
input(…)
放入
int(input(…)
以获取数字,而不是字符串。请阅读@JohnKugelman的消息。您没有问过这个问题,但您可能在这里遇到了一个问题(一个Python问题):
numbers=[]numbers2=numbers.append(1)print(numbers2)