解决以下问题时: “假设您有一个随机的字符串列表(例如:a,b,c,d,e,f,g),请编写一个程序,以字母顺序对字符串进行排序。 您不能使用sort命令。“
我遇到了通过以下代码运行字符串的问题,有时使我在最终列表中出现重复的字符串
我对python还是很陌生,我们的类才刚刚开始研究numpy和该模块中的函数,并且不确定代码中是否使用了任何东西(除任何排序函数外)。
import numpy as np
list=[]
list=str(input("Enter list of string(s): "))
list=list.split()
print() # for format space purposes
listPop=list
min=listPop[0]
newFinalList=[]
if(len(list2)!=1):
while(len(listPop)>=1):
for i in range(len(listPop)):
#setting min=first element of list
min=listPop[0]
if(listPop[i]<=min):
min=listPop[i]
print(min)
listPop.pop(i)
newFinalList.append(min)
print(newFinalList)
else:
print("Only one string inputted, so already alphabatized:",list2)
[“ a”,“ y”,“ z”]的预期结果
[“ a”,“ y”,“ z”]
实际结果...
输入字符串列表:a y z
a 一种 一种 ['a','a','a']
输入字符串列表:d e c
d C d d ['c','d','d']
答案 0 :(得分:1)
您可以为它实施快速排序:
def partition(arr,low,high):
i = ( low-1 )
pivot = arr[high]
for j in range(low , high):
if arr[j] <= pivot:
i = i+1
arr[i],arr[j] = arr[j],arr[i]
arr[i+1],arr[high] = arr[high],arr[i+1]
return ( i+1 )
def quickSort(arr,low,high):
if low < high:
pi = partition(arr,low,high)
quickSort(arr, low, pi-1)
quickSort(arr, pi+1, high)
arr = ['a', 'x', 'p', 'o', 'm', 'w']
n = len(arr)
quickSort(arr,0,n-1)
print ("Sorted list is:")
for i in range(n):
print ("%s" %arr[i]),
输出:
Sorted array is:
a m o p w x
答案 1 :(得分:1)
选择排序:对于列表中的每个索引i
,选择i
或之后的最小项,并将其交换到第i
位。这是三行的实现:
# For each index i...
for i in range(len(list)):
# Find the position of the smallest item after (or including) i.
j = list[i:].index(min(list[i:])) + i
# Swap it into the i-th place (this is a no-op if i == j).
list[i], list[j] = list[j], list[i]
list[i:]
是list
的一个切片(子集),从第i
个元素开始。min(list)
为您提供list
中最小的元素。list.index(element)
为您提供element
中list
的(第一个)索引。a, b = b, a
自动交换a
和b
的值。此实现最棘手的部分是,当您使用index
查找最小元素的索引时,需要在与找到元素相同的list[i:]
切片中查找索引输入,否则您可以在列表的较早部分中选择一个重复元素。由于要找到相对于list[i:]
的索引,因此需要向其添加i
才能在整个list
中获得索引。
答案 2 :(得分:0)
合并排序:
from heapq import merge
from itertools import islice
def _ms(a, n):
return islice(a,n) if n<2 else merge(_ms(a,n//2),_ms(a,n-n//2))
def mergesort(a):
return type(a)(_ms(iter(a),len(a)))
# example
import string
import random
L = list(string.ascii_lowercase)
random.shuffle(L)
print(L)
print(mergesort(L))
样品运行:
['h', 'g', 's', 'l', 'a', 'f', 'b', 'z', 'x', 'c', 'r', 'j', 'q', 'p', 'm', 'd', 'k', 'w', 'u', 'v', 'y', 'o', 'i', 'n', 't', 'e']
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']