Я хочу отсортировать список по каждому элементу.
Пример:Заказать список по всем элементам в Python
myCmpItem = '511'
myList = ['111','222','333','444','555','123']
(some magic)
mySortedList = ['111', '222', '333', '123', '444', '555']
Как алгоритм должен работать:
- Сравнить каждую цифру текущего элемента в MyList с myCmpItem
- Для первого элемента в списке было бы например:
- Разница между 5 и 1 равна 4
- разница между 1 и 1 0
- Разница между 1 и 1 0
- Разница между этими двумя числами 4 (сумма сравнения цифр)
- Сделайте то же самое для всех остальных элементов
- Заказать список по этому расчетному сходству
Я мог бы код это с много для-петли, но я на самом деле ищу более быстрый способ сделать это. Есть ли какой-нибудь алгоритм, который делает что-то подобное? Быстро?
Дальнейшие ограничения
- В моем примере все элементы имеют длину 3, в реальном сценарии они имеют длину 25
- Все детали имеют одинаковую длину, длина (MyList [х]) == 25 всегда верно
- Элементы могут быть строки, Интс, поплавки или что-то лучше подходит к алгоритму
- есть только цифры от 1 до 5
Фон
Все цифры элемента - это ответы на вопросы, и я хочу найти наиболее похожие ответы на заданные ответы. Таким образом, «123» означает, что пользователь ответил на вопросы 1 = ответ 1, вопрос 2 = ответ 2, вопрос 3 = ответ 3. Это вопросы с множественным выбором с 25 вопросами в целом (= длина 25), и всегда есть 5 разных возможно ответить (это цифры 1-5).
PS: Это первый вопрос, который я задал в Stackoverflow, поэтому, пожалуйста, будьте любезны со мной. Я уже много часов работал в Интернете, но я не мог найти решения, поэтому я спросил здесь. Надеюсь, все в порядке. Также английский не является моим родным языком.
Ответ (спасибо всем участникам!) Ответ
@larsmans' (https://stackoverflow.com/a/10790714/511484) объясняет очень хорошо, как решить эту проблему с разумной скоростью. Вы можете даже ускорить алгоритм, вычисляя расстояния между каждой цифрой заранее, см. Сообщение @ gnibbler (https://stackoverflow.com/a/10791838/511484). Все остальные ответы были также хороши и правильны, но я обнаружил, что у @larsmans было лучшее объяснение. Спасибо всем за помощь!
спасибо Woo я тоже думал, поэтому я использовал строки здесь –
Что делать, если разница отрицательная? –
@AshwiniChaudhary его относительное расстояние, поэтому знак можно пропустить (абс). –