Начните с простой функции и уточните ее.
Simple будет использовать 3 sets
(для поиска набор лучше, чем списки) - если наборы не нуждаются в мутировании, используйте вместо этого frozensets
.Используйте простой цикл - прямо:
sample_list = ['1', '0', 'b', 'B', '2', '6', 'a', '7', '9', '5', 'c', 'd', '4', 'A', 'C', 'f', 'D', 'F', '3', 'C', '8', 'A', 'F', 'B', 'A', 'A', 'D']
new_list = []
for item in sample_list:
abc = frozenset("ABC") # frozensets do not change, they are immuteable
dfe = frozenset("DEF") # and fast for lookups. this is less performant
ghi = frozenset("GHI") # then using a dict - but it works as well
if item in abc:
new_list.append("@")
elif item in dfe:
new_list.append("&")
elif item in ghi:
new_list.append("(")
else:
new_list.append(item)
print(new_list)
Вывод:
['1', '0', 'b', '@', '2', '6', 'a', '7', '9', '5', 'c', 'd', '4', '@', '@', 'f', '&', '&', '3', '@', '8', '@', '&', '@', '@', '@', '&']
Чтобы получить больше фантазий, используйте словарь и список-комп:
transform = {"A":"@", "B":"@", "C":"@",
"D":"&", "E":"&", "F":"&",
"G":"(", "H":"(", "I":"("}
new_list = [ transform.get(i,i) for i in sample_list]
Вывод:
['1', '0', 'b', '@', '2', '6', 'a', '7', '9', '5', 'c', 'd', '4', '@', '@', 'f', '&', '&', '3', '@', '8', '@', '&', '@', '@', '@', '&']
См .: