这种简单的气泡排序有效。但是,说A = 45且B = 23,我如何才能打印B,A而不是24、45。提前致谢。
a = input('Pick a number')
b = input('Pick a number')
c = input('Pick a number')
d = input('Pick a number')
e = input('Pick a number')
my_list = [a,b,c,d,e]
def bubble(bad_list):
length = len(bad_list) - 1
sorted = False
while not sorted:
sorted = True
for i in range(length):
if bad_list[i] > bad_list[i+1]:
sorted = False
bad_list[i], bad_list[i+1] = bad_list[i+1], bad_list[i]
bubble(my_list)
print (my_list)
答案 0 :(得分:2)
提供的数字是不同的,您可以首先获取列表的副本,然后查找列表中的原始位置并将其转换为对应的字母:
initial_list = my_list.copy()
bubble(my_list)
print(my_list)
print ([["a", "b", "c", "d", "e"][initial_list.index(i)] for i in my_list])
答案 1 :(得分:1)
您可以使用列表理解将变量转换为numbers
。
my_list = [int(input('Pick a number')) for _ in range(5)]
答案 2 :(得分:1)
这是我的处理方式:而不是仅将数字存储在列表中,而是存储一个既包含数字又包含该项目的“名称”的对(即表示其在原始列表中位置的字母)
from collections import namedtuple
Item = namedtuple('Item', 'number letter')
my_list = []
for letter in 'abcde':
number = int(input('Pick a number: '))
my_list.append(Item(number, letter))
# ... bubble sort code works the same
bubble(my_list)
print([ item.letter for item in my_list ])
示例:
Pick a number: 5
Pick a number: 1
Pick a number: 3
Pick a number: 4
Pick a number: 2
['b', 'e', 'c', 'd', 'a']
之所以可以不更改您的bubble
函数的原因是因为number
将比较这些项目,因为这是元组的第一个组成部分。如果两个项目的编号相等,它们将通过letter
进行比较,并且不会互换,因为第一个字母将始终小于第二个字母;这是正确的,因为冒泡排序不应交换相等的数字。
答案 3 :(得分:0)
如果值是唯一的,则可以制作一个包含变量名作为键,而变量值作为字典值的字典,如下所示:
my_dict = {'a' : a, 'b' : b, 'c' : c, 'd' : d, 'e' : e}
这应该在调用bubble()
函数之前完成。完成排序后,只需执行
def get_key(val):
for key, value in my_dict.items():
if val == int(value):
return key
for i in my_list:
print(get_key(i), end = ', ')
这将输出
a, b, c, d, e,