Python 我怎样才能让这个泡泡更像蟒蛇?
我有以下代码:Python 我怎样才能让这个泡泡更像蟒蛇?,python,bubble-sort,python-3.9,Python,Bubble Sort,Python 3.9,我有以下代码: Sorted=False while not Sorted: Sorted=True for x,y in enumerate(List[:-1]): if List[x]>List[x+1]: List[x],List[x+1]=List[x+1],List[x] Sorted=False 然而,使用 Sorted=True/False 重复是非常难看的,编写类似以下内容的代码会更好: w
Sorted=False
while not Sorted:
Sorted=True
for x,y in enumerate(List[:-1]):
if List[x]>List[x+1]:
List[x],List[x+1]=List[x+1],List[x]
Sorted=False
然而,使用
Sorted=True/False
重复是非常难看的,编写类似以下内容的代码会更好:
while True:
for x,y in enumerate(List[:-1]):
if List[x]>List[x+1]:
List[x],List[x+1]=List[x+1],List[x]
break
else:break
唯一的问题是,如此早地中断循环会导致循环重复多次,从而占用更多的时间。有没有办法让代码更具python风格,或者我只需要让它保持丑陋
for idx in range(len(List)-1):
if List[idx]>List[idx+1]:
List[idx],List[idx+1] = List[idx+1],List[idx]
Sorted=False
我不认为有更好的方法来构造这个pythonical。我可以根据建议提出一些格式问题,这将使您的代码更易于阅读:
变量(无大写字母)snake_case
- 赋值中
周围的空格,逗号后,通常围绕比较=
range(len(…)
。考虑到这些因素(然后避免产生的保留关键字,排序
和列表
):
done\u排序=False
未完成排序时:
完成排序=真
对于范围内的i(len(lst-1)):
如果lst[i]>lst[i+1]:
lst[i],lst[i+1]=lst[i+1],lst[i]
完成排序=错误
现在,在Python中,这通常是一种传统的智慧。正如Trey Hunner在那篇文章中得出的结论:
如果您发现自己试图使用范围(len(my_list))
或循环计数器,请考虑是否可以重新定义问题,以允许使用zip
或枚举
(或两者的组合)
事实上,如果您发现自己正在使用枚举
,请考虑是否确实需要索引。Python中很少需要索引
然而,这在很大程度上是因为Python的数组(双关语)内置了用于迭代和排序的工具。如果您想纯粹将列表排序作为一个实际问题,那么可以使用sorted()
或.sort()
,而不是作为练习实现自己的冒泡排序。在这种情况下,有意使用较低级别的细节,直接使用索引是有意义的
只是为了好玩。。。如果您真的想以更“正常的Pythonic”的方式进行此操作,它可能看起来像这样:
done\u排序=False
未完成排序时:
完成排序=真
对于zip中的(i,first)、(j,second)(枚举(lst[:-1]),枚举(lst[1:]):
如果第一次>第二次:
lst[i],lst[j]=第二,第一
完成排序=错误
我不认为有人会认为这会提高可读性
另外,它对于气泡排序没有用处,因为它不提供索引访问权限,但是您可能想了解的相关信息是
成对
函数。在列表中的连续重叠对上循环非常方便:
成对排列的第一个、第二个(lst):
它将作为一个组件包含在Python 3.10中,但您也可以在早期版本中使用它:
- 它包含在可安装的软件包中
- 这些文档包括一个自己实现的现成文档