如何将列表向右移动一个元素[1,2,3,4]>[4,1,2,3]?在左边[1,2,3,4]>[2,3,4,1]?

2022-09-28 21:42:38 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

我在循环中遇到了一个错误,就好像你输入了:142,324,23123,645,643它将把23123推向右边,但其余的数字将按降序排列。因为这是一个问题,我试图通过一个新的if语句来检查最后一个和第一个数字来解决这个问题,然后它必须把最后一个数字放在前面[2,1,3]-->;[3,2,1]。但是当我这样做的时候,我使用了一个for循环,没有:-和数字[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,但什么也没找到。抱歉问了这么长时间。你知道吗


Tags: and代码gt列表forlenif编程错误数字printnumberselif陌生numbers2
1条回答
网友
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]

您可以将这些逻辑合并到一个自定义函数中,以向左和向右移动,如下所示:

def shift_list(my_list, shift_by):
    return my_list[shift_by:] + my_list[:shift_by]

在上述shift_list函数中,对于:

  • 左移:传递正整数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]

作为替代,您还可以将^{}列表理解^{}一起使用。它比上述解决方案稍微复杂,但仍然比您的解决方案简单:

向右移动

>>> 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]

热门问题