我写了一个冒泡排序算法,用整数部分来整理元组列表。
但是如果给定列表已经排序,我想返回None。我该怎么做?
def bubble_sort_2nd_value(tuples_list):
NEWLIST = []
for i in tuples_list:
NEWLIST.append(i)
for i in range(len(NEWLIST)):
for j in range(i+1, len(NEWLIST)):
if(NEWLIST[j][1]<NEWLIST[i][1]):
NEWLIST[j],NEWLIST[i] = NEWLIST[i],NEWLIST[j]
print(NEWLIST)
tuples_list = [("h1",1),("h2",2),("h3", 3), ("hi" , 4)]
bubble_sort_2nd_value(tuples_list)
答案 0 :(得分:0)
简单的答案是在排序之前检查列表是否已排序。我不会看到任何比这更容易的解决方案。
或者检查是否有任何项目被移动:
def bubble_sort_2nd_value(tuples_list):
NEWLIST = []
itemMoved=0
for i in tuples_list:
NEWLIST.append(i)
for i in range(len(NEWLIST)):
for j in range(i+1, len(NEWLIST)):
if(NEWLIST[j][1]<NEWLIST[i][1]):
itemMoved=1
NEWLIST[j],NEWLIST[i] = NEWLIST[i],NEWLIST[j]
if(itemMoved==0): print("None")
else: print(NEWLIST)
tuples_list = [("h1",1),("h2",2),("h3", 3), ("hi" , 4)]
bubble_sort_2nd_value(tuples_list)
答案 1 :(得分:0)
检查您是否更改了阵列 并且只有在它被改变时才返回它:
def bubble_sort_2nd_value(tuples_list):
edited = False
newlist = []
for i in tuples_list:
newlist.append(i)
for i in range(len(newlist)):
for j in range(i+1, len(newlist)):
if (newlist[j][1]<newlist[i][1]):
edited = True
newlist[j], newlist[i] = newlist[i], newlist[j]
if edited:
return newlist
答案 2 :(得分:0)
tuples_list = [("h1",1),("h2",2),("h3", 3), ("hi" , 4)]
sorted(tuples_list, key=lambda x: x[1])
答案 3 :(得分:0)
您可以判断列表是否按以下内容排序:
#!/usr/bin/python3
def is_sorted(list_):
result = True
for element1, element2 in zip(list_, list_[1:]):
if element1 <= element2:
# this pair compares favorably
pass
else:
result = False
break
return result
但是,如果这不是学术练习,你可能应该使用像sorted(list_,key = operator.itemgetter(1))这样的东西 - 因为它更容易,而且因为Python的内置排序非常好。
HTH