2016-08-23 2 views
1

Я хочу отсортировать список в соответствии с пользовательским вводом.Как отсортировать список списка по вкладу пользователя?

output = [[1,2],[3,4],[5,6],[7,8]] # input 
#   ^ ^ ^ ^
#   A  B  C  D 
A = output[0] ; B = output[1] ; C = output[2] ; D = output[3] # initialization 
userin = input('Enter sequence') 
seq_list = userin.split(',') 
print(seq_list) 

>>> Enter sequence B,C,D,A 
>>> ['B', 'C', 'D', 'A'] 

Python интерпретирует входные значения как строку, тогда как я хочу, чтобы соответствующий список был отражен.

Ожидаемый результат:

>>> Enter sequence B,C,D,A 
>>> [[3, 4], [5, 6], [7, 8], [1, 2]] 
+2

Вы можете преобразовать свой список в словарь и затем распечатать ключи в соответствии с данными пользователя. – grael

+1

Почему бы не использовать числа вместо букв и использовать их непосредственно для индексирования? – Julien

+0

@grael ok позвольте мне попробовать это с помощью dict –

ответ

0

EDIT: я повторно написал output переменную в качестве словаря, используя указанные письма в качестве ключей. Затем он использует представление списка на seq_list для доступа к словарю в том порядке, в котором пользователь поставил.

output = {"A": [1,2], "B": [3,4],"C": [5,6],"D": [7,8]} 
userin = input('Enter sequence') 
seq_list = userin.split(',') 
temp_list = [output[key] for key in seq_list] 
print(temp_list) 
+0

Просьба привести текст, объясняющий, почему это подходящее решение и что он делает – hardillb

+0

@hardillb, если вы можете предоставить мне лучшее решение с объяснением, его более чем хорошо, –

+0

@Tarun K Запрос для некоторых объяснений не обязательно для вашей выгоды, но для следующего человека, который наткнулся на это через поиск. Это было отмечено как ответ низкого качества, теперь лучше – hardillb

0

Было бы проще вводить номера пользователей вместо букв. Однако, если вы хотите придерживаться букв, вы можете просто сопоставить их в словаре. Мой пример подход выглядит следующим образом:

output = [[1,2],[3,4],[5,6],[7,8]] 
output_dict = {i:elem for i, elem in enumerate(output)} 
user_input = input('Enter sequence - numbers from 1 to 4 separated by comma') 
print [output_dict[elem - 1] for elem in user_input] 
1

Вы можете использовать словарь понимания и функции zip конвертировать output список списков в Словаре списков.

output = [[1, 2], [3, 4], [5, 6], [7, 8]] 
d = {c: u for c, u in zip('ABCD', output)} 
print(d) 

userin = 'B,C,D,A' 
seq_list = [d[c] for c in userin.split(',')] 
print(seq_list) 

типичного выход

{'C': [5, 6], 'B': [3, 4], 'A': [1, 2], 'D': [7, 8]} 
[[3, 4], [5, 6], [7, 8], [1, 2]] 

Python словари неупорядоченные, а в Python 3 порядка, что товар Словаре d печатается будет меняться каждый раз, когда вы запускаете свой код. Разумеется, это не повлияет на порядок подписок в seq_list

Смежные вопросы