在Python中迭代列表并连接字母序列

在Python中迭代列表并连接字母序列,python,list,char,Python,List,Char,我试图遍历一个列表,并为列表中的每个元素分配一个字母,如果有重复项,则将字母表中的下一个字母分配给它,以获得唯一的项 sequence = [0, 1, 2, 3, 1, 4, 2, 1] unique_seq = [0A, 1A, 2A, 3A, 1B, 4A, 2B, 1C] 我尝试生成一个字母列表,如下所示: alpha = list(map(chr, range(65, 91))) 然后我想像这样迭代序列: for i in sequence: unique_seq.

我试图遍历一个列表,并为列表中的每个元素分配一个字母,如果有重复项,则将字母表中的下一个字母分配给它,以获得唯一的项

sequence = [0, 1, 2, 3, 1, 4, 2, 1]
unique_seq = [0A, 1A, 2A, 3A, 1B, 4A, 2B, 1C]
我尝试生成一个字母列表,如下所示:

alpha = list(map(chr, range(65, 91)))
然后我想像这样迭代序列:

for i in sequence:
        unique_seq.append(i) for i in sequence if i not in unique_seq else...
我不知道接下来该怎么做


谢谢你,

这是我做的发电机。我正在使用集合中的计数器数据结构。如果密钥尚不存在,则返回0,而不是密钥错误。所以我们可以用它作为alpha列表的索引

>>> import string, collections

>>> c = collections.Counter()
>>> for x in [0, 1, 2, 3, 1, 4, 2, 1]:
        letter = string.letters[c[x]]
        c[x] += 1
        print '%s%s' % (x, letter)


0A
1A
2A
3A
1B
4A
2B
1C
添加了一个函数,用于生成excel列样式的字母。测试了100万个相同数量的版本

import collections

# Uncomment for Python 2.X
#from __future__ import division, print_function

sequence = [0, 1, 2, 3, 1, 4, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]

def get_excel_column(number):
    dividend = number
    column_name = []
    while dividend > 0:
        modulo = (dividend - 1) % 26
        column_name.insert(0, chr(modulo + 65))
        dividend = (dividend - modulo) // 26
    return ''.join(column_name)

def get_unique(seq):
    cnt = collections.Counter()
    for item in seq:
        cnt[item] += 1
        yield '%s%s' % ( str(item), get_excel_column(cnt[item]) )

for uniq in get_unique(sequence):
    print(uniq)
输出:

0A
1A
2A
3A
1B
...
1AC
1AD
1AE

注意:Python3语法。根据需要更改打印和除法。

这里有一个解决方案,可以处理无限大的序列和无限次的重复(内存允许)

其结果是:

>>> build_unique_sequence([0, 1, 2, 3, 1, 4, 2, 1])
['0A', '1A', '2A', '3A', '1B', '4A', '2B', '1C']

维持序列的顺序重要吗?是的。我想保持与它的顺序完全相同。@user3263488如果1出现超过26次该怎么办?我想它会继续以excel的方式使用AA,AB,AC…如果数字出现超过26次,他想生成类似AA,AB的序列。提供的代码应该可以启动操作。如果感兴趣,他可以用适当的顺序替换string.letters。发帖的人需要能够完成至少一部分的努力。毕竟,原来的问题中甚至没有提到AA,AB部分。否则,我们只是在为人们做家庭作业。你是对的:)我刚才提到了这一点,因为这不是问题的一部分,在评论部分。当然,我甚至没有想到这是一个家庭作业问题。如果是的话,你使用它,我会非常非常难过。这不是家庭作业的问题。我是一个编程的设计师。谢谢你的帮助!没问题,很高兴我能帮忙。我在代码中添加了一些注释,使事情变得更加清楚。或者来自uuu future uuu导入部门,print u function=)实际上是真的,我将在注释中添加这一点。
>>> build_unique_sequence([0, 1, 2, 3, 1, 4, 2, 1])
['0A', '1A', '2A', '3A', '1B', '4A', '2B', '1C']