Как найти общие числа в списке из списка чисел и назначить его букве, а затем добавить, чтобы показать строку букв? - PullRequest
1 голос
/ 12 июня 2019

У меня есть список из 4 чисел, которые мне нужно преобразовать в список букв, и каждый набор не зависит от предыдущего набора.Затем я хочу добавить строку букв в новый список.Например:['001', '001', '001', '001'] в ['A', 'A', 'A', 'A']['014', '013', '013', '023'] в ['A', 'B', 'B', 'C']['001', '001', '001', '003'] в ['A', 'A', 'A', 'B']['001', '001', '001', '004'] в ['A', 'A', 'A', 'B']

Polymer_data = Polymer_data.sort_values(['ID'])
for i in Polymer_data.ID:
    print(i.split('-'))

['001', '001', '001', '001']
['001', '001', '001', '002']
['001', '001', '001', '003']
['001', '001', '001', '004']
...
['025', '022', '024', '025']
['025', '023', '024', '025']
['025', '024', '024', '025']
['025', '025', '025', '025']

Ожидаемые результаты должны быть:

['A', 'A', 'A', 'A']
['A', 'A', 'A', 'B']
['A', 'A', 'A', 'B']
['A', 'A', 'A', 'B']
...
['A', 'B', 'C', 'A']
['A', 'B', 'C', 'A']
['A', 'B', 'B', 'A']
['A', 'A', 'A', 'A']

Редактировать: чтобы уточнить, каждый список не зависит друг от друга, поэтому 1-му уникальному значению в каждом списке присваивается «A»,2-е уникальное значение - «B» и т. Д.

Также диапазон значений от 001 до 025, «...» представляет все значения между ними, которые я не выписал (не знаю, какотформатировать это).Таким образом, в общей сложности есть список из 195625 возможных комбинаций с 001-025, расположенных по схеме 4.

Ответы [ 2 ]

1 голос
/ 12 июня 2019
  1. используйте ord для получения кодового номера из 'A'
  2. очистите элемент, дублированный из исходного списка
  3. получите и добавьте индекс к коду из 'A'
  4. используйте chr для преобразования его в символ

Из этого примера кода можно понять следующее:

lists = [['001', '001', '001', '002', '001', '003'],
         ['021', '022', '020', '021', '025', '022']]

result = []
for lista in lists:
    code = ord('A')
    listb = list(set(lista))
    listb.sort()
    result.append([chr(listb.index(x)+code) for x in lista])

print (result)

Результат равен

[['A', 'A', 'A', 'B', 'A', 'C'], ['B', 'C', 'A', 'B', 'D', 'C']]
0 голосов
/ 12 июня 2019

Это может быть не совсем элегантно.Единственное преимущество - вы можете легко изменить назначенное значение, если планируете использовать что-то отличное от A, B, C, D

input_lists = [
['001', '001', '001', '001'],
['001', '001', '001', '002'],
['001', '001', '001', '003'],
['001', '001', '001', '004'],
['025', '022', '024', '025'],
['025', '023', '024', '025'],
['025', '024', '024', '025'],
['025', '025', '025', '025']
]

assignment = { '0' : 'A', '1': 'B', '2': 'C', '3': 'D'}  # dictionary for value assignment

for i,input_list in enumerate(input_lists):
    list_set = set(input_list)  # create a set of unique values in each "sub" list
    unique_list = list(list_set)  # convert the set back to a list for indexing
    for j,val in enumerate(input_list):
        val_assign = assignment[str(unique_list.index(val))]
        input_lists[i][j] = val_assign  # write the assigned value directly back to the input lists

print(input_lists)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...