如何在数字列表中找到通用数字并将其分配给字母,然后附加以显示字母字符串?

时间:2019-06-12 10:47:26

标签: python list

我有一个包含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']

编辑:为使每个列表相互独立,因此将每个列表中的第一个唯一值分配为“ A”,将第二个唯一值分配为“ B”,等等。

此外,值的范围在001-025之间,“ ...”代表我未写出的所有值(不确定如何格式化)。因此,总共有195625种001-025可能组合的列表,排列方式为4。

2 个答案:

答案 0 :(得分:1)

  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']]

答案 1 :(得分:0)

这可能一点都不优雅。唯一的好处是,如果您打算使用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)