我必须创建自己的"排序"按字母顺序排列功能,然后在另一个功能中使用功能。目的是按字母顺序对列表进行排序,我的测试列表有4个元素,但最终的目的是将这个功能应用到一个巨大的列表中,这就是为什么我首先在几个元素上尝试它,因为它& #39;更容易分析结果。
这是按字母顺序排序的函数:
def alphaOrder(word1, word2, index):
if index == len(word1):
return [word1, word2]
if index == len(word2):
return [word2, word1]
if ord(word1[index]) == ord(word2[index]):
return alphaOrder(word1, word2, index + 1)
elif ord(word1[index]) < ord(word2[index]):
return [word1, word2]
else:
return [word2, word1]
这是我尝试使用超过2个元素列表的函数:
def sortMyList(liste):
continu = True
noInversion = False
i = 0
while continu:
item0 = liste[i]
item1 = liste[i + 1]
l = alphaOrder(item0, item1, 0)
if liste[i] != l[0]:
noInversion = True
liste[i] = l[0]
liste[i+1] = l[1]
if i + 1 < len(liste):
i += 1
else:
i = 0
if noInversion:
continu = False
return liste
这是我的测试列表,用于验证我的功能是否有效:
a = []
a.append("aaaazza")
a.append("anaaazza")
a.append("anaaazz11a")
a.append("aaaaa")
print(a)
print(sortMyList(a))
当我打印时,这就是我得到的:
['aaaazza', 'anaaazza', 'anaaazz11a', 'aaaaa']
['aaaazza', 'anaaazz11a', 'anaaazza', 'aaaaa']
但我应该得到:
['aaaaa', 'aaaazza', 'anaaazz11a', 'anaaazza']
有人知道什么是错的,我应该纠正什么?
答案 0 :(得分:1)
不确定在这里做自己的功能的想法,但你可以通过简单地使用内置的sorted函数轻松实现这一点:
>>> sorted(['aaaazza', 'anaaazza', 'anaaazz11a', 'aaaaa'])
['aaaaa', 'aaaazza', 'anaaazz11a', 'anaaazza']
答案 1 :(得分:0)
您的问题是,一旦找到需要交换的两个项目,您可以设置noInversion
为真,并在切换后立即从列表中退出。
您需要做的是完成一次完整的传递,并且只在传球结束时检查您的旗帜。你还需要整理反转标志:你希望它从false开始,在交换项时设置为true,如果它仍然是假,则在最后打破循环。
def sortMyList(liste):
continu = True
while continu:
inversion = False
for i in range(len(liste)-1):
item0 = liste[i]
item1 = liste[i + 1]
l = alphaOrder(item0, item1, 0)
if liste[i] != l[0]:
inversion = True
liste[i] = l[0]
liste[i+1] = l[1]
if not inversion:
continu = False
return liste
然后你可以对代码做很多清理工作。使用break
代替continu
标记,并将分配合并到列表中会有所帮助:
def sortMyList(liste):
while True:
inversion = False
for i in range(len(liste)-1):
item0 = liste[i]
item1 = liste[i+1]
liste[i], liste[i+1] = alphaOrder(item0, item1, 0)
if liste[i] != item0:
inversion = True
if not inversion:
break
return liste
你可以做更多的事情来改善它,但这应该让你开始。
答案 2 :(得分:0)
这是最终的工作职能:
MyArray<T>
结果是:
def sortMyList(liste):
continu = True
inversion = False
i = 0
while continu:
print("i : " + str(i) + " " + str(liste))
item0 = liste[i]
item1 = liste[i + 1]
print("Comparison between " + item0 + " and " + item1 + " inversion : " + str(inversion))
l = alphaOrder(item0, item1, 0)
if liste[i] != l[0]:
inversion = True
print("I have to do an inversion : " + str(inversion))
liste[i] = l[0]
liste[i+1] = l[1]
if not inversion and i+2 == len(liste):
continu = False
if (i + 2) < len(liste):
i += 1
else:
i = 0
inversion = False
return liste
我添加了大量的打印件,以查看列表中的每个更改以及反转的时间是真还是假。
谢谢你们的答案。