второй список, отсортированный по первомусписок, чтобы соответствовать другой вложенный список
[['E', 'E', 'C], ['B', 'C', 'A'], ['E', 'B', 'F'], ['D', 'F', 'E']]
второй список, отсортированный по первомусписок, чтобы соответствовать другой вложенный список
[['E', 'E', 'C], ['B', 'C', 'A'], ['E', 'B', 'F'], ['D', 'F', 'E']]
Вот некоторые быстрый код, который я сделал, это работает, но это, возможно, потребуется некоторое рефакторинга:
def getListIndexes(some_list):
return [x for x in enumerate(some_list)]
list1 = [['C', 'B', 'A']]
list2 = [['C', 'E', 'E'], ['C', 'B', 'A'], ['F', 'B', 'E'], ['E', 'F', 'D']]
values_before_1 = getListIndexes(list1[0])
values_after_1 = getListIndexes(list(sorted(list1[0])))
mapping = dict.fromkeys(list(range(len(list1[0]))))
for item in values_before_1:
before, then = [(item[0],x[0]) for i, x in enumerate(values_after_1) if item[1]==x[1]][0]
mapping[then] = before
results = [[None, None, None] for l in range(len(list2))]
for i, item in enumerate(list2):
values = getListIndexes(item)
for j in range(len(item)):
results[i][mapping[j]] = list2[i][j]
print "[*] list1 with content: {} has been sorted and now is like: {}\n".format(list1[0], sorted(list1[0]))
print "[*] list2 with content:\n\n{}\n".format(list2)
print "...has been sorted based on list1 sorting and now looks like this...\n"
print results
Выходные данные:
[*] list1 with content: ['C', 'B', 'A'] has been sorted and now is like: ['A', 'B', 'C']
[*] list2 with content:
[['C', 'E', 'E'], ['C', 'B', 'A'], ['F', 'B', 'E'], ['E', 'F', 'D']]
...has been sorted based on list1 sorting and now looks like this...
[['E', 'E', 'C'], ['A', 'B', 'C'], ['E', 'B', 'F'], ['D', 'F', 'E']]
@ Lcallan, мое удовольствие. Пожалуйста, не забудьте принять мой ответ, если это поможет вам решить проблему :) –
@ Lcallan вот вы где. Проверьте мой обновленный ответ. –
ref_list = ['c','b','a']
# sort [1,2,3] according to ref_list... viz: ['c','a','b'] => [3,1,2]
ordering = sorted(range(len(ref_list)), key=lambda i: ref_list[i])
for j in range(len(list2)):
list2[j] = [list2[j][i] for i in ordering]
Я буду голосовать за ваш ответ, потому что это лучше, чем у меня. Спасибо, потому что сегодня я чему-то научился! –
В чем причина '['E', 'F', 'D']' to '['D', 'F', 'E']'? – Leb
Неясно, что именно вы пытаетесь сделать. Вы пытаетесь определить, какое направление сортировать каждый из других списков, как по восходящей, так и по нисходящей? Если это так, мы могли бы сказать, что ваш образец должен опускаться, но порядок сортировки других списков в вашем примере «после» в лучшем случае произволен. – Matt