为什么这些修改后的冒泡排序算法不会在 python3 中产生相同的顺序?
Why don't these modified bubble sort algorithms produce the same order in python3?
Objective: 仅按前两个字符对列表进行排序,当比较列表中的两个元素时,如果它们相同则保持原来的顺序。
片段#1
l= []
for i in range(int(input())):
l.append(input().split())
for i, j in enumerate(l):
for b, c in enumerate(l[:-1]):
if l[b][:2] > l[b+1][:2]:
l[b],l[b+1] = l[b+1], l[b]
l = [x[0] for x in l]
print( '\n'.join(str(p) for p in l))
#1 的输出:
考虑整个文本时,这些项目是按字母顺序排列的,但我只想考虑每个字符串的前两个字符并进行比较。当它们相同时,我想要比较的那些的原始顺序。
片段 #2
l = ['Hilbert','Godel','Poincare', 'Ramanujan','Pochhammmer']
for i, j in enumerate(l):
for b, c in enumerate(l[:-1]):
if l[b][:2] > l[b+1][:2]:
l[b],l[b+1] = l[b+1], l[b]
#l = [x[0] for x in l]
print( '\n'.join(str(p) for p in l))
#2 的输出:
这个输出是我所期待的。
在第一个算法中,当您使用 .split() 时,您创建了一个列表列表。所以你的变量 (l) 等于:
[['Hilbert'], ['Godel'], ['Poincare'], ['Ramanujan'], ['Pochammer']]
(对不起,如果我拼错了)
因此,当您询问 l[b][:2] 时,您要求的是列表 ['Poincare'] 的前两个元素,这是初始列表位置 b 中的列表,它等于 ['Poincare']。所以当它到达 ['Poincare'] > ['Pochammer'] 时,它给出 'True'。
鉴于您的列表仅由一个元素组成(例如 ['Hilbert']),它能够以正确的方式对它们进行排序,唯一的问题是 ['Poincare'] - ['Pochammer']
下次在这种情况下不要使用 .split(),而是尝试使用 l.append(input(''))。 .split() 更适合用于 'A B C D E'.split() 或类似的东西。
Objective: 仅按前两个字符对列表进行排序,当比较列表中的两个元素时,如果它们相同则保持原来的顺序。
片段#1
l= []
for i in range(int(input())):
l.append(input().split())
for i, j in enumerate(l):
for b, c in enumerate(l[:-1]):
if l[b][:2] > l[b+1][:2]:
l[b],l[b+1] = l[b+1], l[b]
l = [x[0] for x in l]
print( '\n'.join(str(p) for p in l))
#1 的输出: 考虑整个文本时,这些项目是按字母顺序排列的,但我只想考虑每个字符串的前两个字符并进行比较。当它们相同时,我想要比较的那些的原始顺序。
片段 #2
l = ['Hilbert','Godel','Poincare', 'Ramanujan','Pochhammmer']
for i, j in enumerate(l):
for b, c in enumerate(l[:-1]):
if l[b][:2] > l[b+1][:2]:
l[b],l[b+1] = l[b+1], l[b]
#l = [x[0] for x in l]
print( '\n'.join(str(p) for p in l))
#2 的输出: 这个输出是我所期待的。
在第一个算法中,当您使用 .split() 时,您创建了一个列表列表。所以你的变量 (l) 等于: [['Hilbert'], ['Godel'], ['Poincare'], ['Ramanujan'], ['Pochammer']] (对不起,如果我拼错了) 因此,当您询问 l[b][:2] 时,您要求的是列表 ['Poincare'] 的前两个元素,这是初始列表位置 b 中的列表,它等于 ['Poincare']。所以当它到达 ['Poincare'] > ['Pochammer'] 时,它给出 'True'。 鉴于您的列表仅由一个元素组成(例如 ['Hilbert']),它能够以正确的方式对它们进行排序,唯一的问题是 ['Poincare'] - ['Pochammer'] 下次在这种情况下不要使用 .split(),而是尝试使用 l.append(input(''))。 .split() 更适合用于 'A B C D E'.split() 或类似的东西。