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)