为什么这些修改后的冒泡排序算法不会在 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() 或类似的东西。