Как нумеровать элементы в списке строк и возвращать новый список? - PullRequest
3 голосов
/ 08 апреля 2020

Итак, у меня есть список строк. Я хочу создать новый список строк, который превращает эту же строку в новую строку и назовите ее «A». Если в списке есть другая строка, назовите ее «B» и так далее. Если строка:

['F4','A3','F4','B5','A3','K2']

, тогда она должна дать мне результат:

['A','B','A','C','B','D']

Я не знаю, как запустить код, и могу думать только о чем-то вроде словарь.

dict = {}
result = []
for line in list1:
    if line not in dict:
       dict.update({line:str(chr(65+len(dict)))})
result.append(dict.get(line))

Тогда я не знаю, как продолжить. Любая помощь будет оценена.

Ответы [ 3 ]

3 голосов
/ 08 апреля 2020

Вы можете создать итератор строк верхнего регистра и извлекать их по одному в конструкторе defaultdict . Тот, который у вас есть, это просто понимание списка. Что-то вроде:

import string
from collections import defaultdict

keys = iter(string.ascii_uppercase)
d = defaultdict(lambda: next(keys))

l = ['F4','A3','F4','B5','A3','K2']

[d[k] for k in l]
# ['A', 'B', 'A', 'C', 'B', 'D']
0 голосов
/ 08 апреля 2020

Вы можете создать простой класс для хранения текущих результатов:

import string
class L:
   def __init__(self):
      self.l = {}
   def __getitem__(self, _v):
      if (val:=self.l.get(_v)) is not None:
        return val
      self.l[_v]= (k:=string.ascii_uppercase[len(self.l)])
      return k


l = L()
vals = ['F4','A3','F4','B5','A3','K2']
result = [l[i] for i in vals]

Вывод:

['A', 'B', 'A', 'C', 'B', 'D']
0 голосов
/ 08 апреля 2020
import string

mapping = {}
offset = 0

for item in l:
    if item in mapping:
        continue
    mapping[item] = string.ascii_uppercase[offset]
    offset += 1

[mapping.get(item) for item in l]

Выход

['A', 'B', 'A', 'C', 'B', 'D']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...