#python-3.x #list #algorithm #bubble-sort
#python-3.x #Список #алгоритм #пузырьковая сортировка
Вопрос:
Цель: упорядочить список только по первым двум символам, при сравнении двух элементов из списка, если они совпадают, сохранить исходный порядок.
Фрагмент # 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:
Этот результат — то, что я ожидал.
Комментарии:
1. Какая часть любого фрагмента кода налагает какой-либо конкретный порядок, если первые 2 символа одинаковы?
2. @ScottHunter даже если бы я сделал что-то подобное, результат противоречив: def first_letters(word): возвращает word[:2] l= [] для i в диапазоне(int(input())): l.append(input().split()) r = sorted(l, key=first_letters, reverse=False) печать (r)
3. Какая часть вашего кода предназначена для устранения этой «несогласованности»?
Ответ №1:
В первом алгоритме при использовании .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() или что-то в этом роде.