- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在做一个基本的冒泡排序,而且我对编程还很陌生,所以我的代码可能不是那么高效或设计良好。我的代码:
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 循环: - 和numbers[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]:
类型错误:“bool”和“str”实例之间不支持“>”
所以我搜索了一下是否可以用“但是”来代替“但是”,但我什么也没找到。抱歉问了一个很长的问题。
最佳答案
实现此目的的最简单方法是使用列表切片功能:
向右移动
>>> 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]
<小时/>
作为替代方案,您还可以使用 itertools.cycle
与列表理解和next
。它比上面的解决方案稍微复杂一些,但仍然比你的简单:
向右移动
>>> 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]
关于python - 如何将列表右移一个元素 [1, 2, 3, 4] -> [4, 1, 2, 3] ?向左 [1, 2, 3, 4] -> [2, 3, 4, 1]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48251261/
我正在做一个项目,我的 android 在这个项目中作为一个网络服务器工作;输入带端口号的 IP 地址,打开 Web 界面,用户可以将文件上传到手机。我想在 Web 界面上显示一些图片,以便我们的界面
我是一名优秀的程序员,十分优秀!