我是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
已找到答案!
答案 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)
以上内容相当简单,易于阅读,并且允许以稳定的方式访问新创建的列表。它至少比使用eval
和exec
编辑:我以为你想要指数而不是字符?之后我才意识到这一点,但显然这是正确的答案&#39;。您发送了有关您需要的答案的混合消息。
SuperEdit:好的,现在您应该将正确答案作为 正确答案。不要给予我信任,这是不值得的! :)