使用枚举列表A中的索引附加列表B.

时间:2014-06-21 01:33:42

标签: python list dictionary indexing enumerate

我是python的新手。当我尝试将列表字符串及其索引复制到循环创建的列表变量时,我返回一个空列表。但是,在复制之前打印列表会返回我想要的所有数据。

这个网站让我想到使用切片b = a [:](http://henry.precheur.org/python/copy_list)。当我使用这种技术b = list(a)来自同一网站时它也不起作用。

我的目标是创建一系列列表,其中只有一个列表用于用户输入字符串中的每个唯一字符。每个列表都以唯一字符开头,后跟原始用户字符串中每个字符出现的索引。

for i, value in enumerate (xlist):
    exec "var%i=list()" %(i)
    exec "global var%i" %(i)

def enum():
    global character_count
    global xlist
    for i, value in enumerate (xlist):
        exec "global var%i" %(i) 
    for i, value in enumerate(xlist):
        if value=="%s" %str(xlist[character_count]):
            value=[value]
            value.append(i)
            print value 
            """<--This returns a full list"""
            exec "var%i=value[:]" %(i)
            exec "print var%i" %(i) 
            """<-- This returns an empty list"""

def enum2():
    global character_count
    global xlength
    while character_count<xlength:
        enum()
        character_count=character_count+1
        continue

enum2()
print var38


"""output ['?', 38]
   output []
   desired output ['?', 38]
   desired output ['?', 38]"""

通过更新字典,我越来越接近我想要的东西了。 但是,每个唯一字符只返回一个索引。我想要所有指数。

应该使用集合而不是字典将索引附加到键/集?这可能是字典吗?

"""Output
Input: Hello
{'h': 0, 'e': 1, 'l': 3, 'o': 4}
Desired
{'h': 0, 'e': 1, 'l': [2, 3], 'o': 4}"""

string=raw_input("Input: ")
string_lower=string.lower()
string_list=list(string_lower)

string_dict = dict()
for i, j in enumerate(string_list):
    string_dict.update({j:i})
print string_dict

已找到答案!

2 个答案:

答案 0 :(得分:1)

在(https://stackoverflow.com/a/2285887/3761932

上修改答案(Python dictionary that maps strings to a set of strings?)后出现了一个解决方案

这是我拥有的

string=raw_input("Input: ")
string_lower=string.lower()
string_list=list(string_lower)

string_dict = dict()
for j in string_list:
    string_dict[j]=list()
for i, j in enumerate(string_list):
    string_dict[j].append(i)
print string_dict

输入:我可以把你和夏天比较一下吗?

{&#39; a&#39;:[2,12,24,36],&#39; &#39;:[5,7,15,20,23,25,34],&#39; c&#39;:[8],&#39; e&#39;:[14,18,19, 30],&#39;&#39;:[35],&#34;&#39;&#34;:[32],&#39;我&#39;:[6],&#39; h&#39;:[1,17],&#39; m&#39;:[10,28,29],&#39; l&#39;:[3,4],&#39; o&#39 ;:[9,22],&#39; p&#39;:[11],&#39;:[0,26,33],&#39; r&#39;:[13, 31,&#39; u&#39;:[27],&#39;:[16,21],&#39; y&#39;:[37],&#39;?& #39;:[38]}

答案 1 :(得分:0)

作为上述评论的答案,实现此类列表字典的一种简单方法是:

string = 'efjseojfgiohgfiosjflk'
list_of_chars = dict()
for n in set(string):
    list_of_chars[n] = [n]*string.count(n)

以上内容相当简单,易于阅读,并且允许以稳定的方式访问新创建的列表。它至少比使用evalexec

的邪恶更好

编辑:我以为你想要指数而不是字符?之后我才意识到这一点,但显然这是正确的答案&#39;。您发送了有关您需要的答案的混合消息。

SuperEdit:好的,现在您应该将正确答案作为 正确答案。不要给予我信任,这是不值得的! :)