用枚举列表A的索引追加列表B
我刚开始学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 个回答
作为对上面评论的回答,创建这样一个列表字典的简单方法是:
string = 'efjseojfgiohgfiosjflk'
list_of_chars = dict()
for n in set(string):
list_of_chars[n] = [n]*string.count(n)
上面的代码相对简单,容易理解,并且提供了一种稳定的方式来访问新创建的列表。至少比使用那些可怕的 eval
和 exec
要好得多。
编辑:我原以为你想要的是索引,而不是字符?我后来才意识到这一点,但显然这就是“正确答案”。你给出的信息让我有些困惑,不知道你到底需要什么样的答案。
超级编辑:好的,现在你应该把你的正确答案标记为 正确答案。别让我得到不该得的荣誉! :)
这个解决方案是在修改了一个回答后得到的,链接在这里:(https://stackoverflow.com/a/2285887/3761932),这个回答是关于如何创建一个将字符串映射到字符串集合的Python字典的。
这是我得到的结果:
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
输入内容是:我可以把你比作一个夏天的日子吗?
输出结果是:{'a': [2, 12, 24, 36], ' ': [5, 7, 15, 20, 23, 25, 34], 'c': [8], 'e': [14, 18, 19, 30], 'd': [35], "'": [32], 'i': [6], 'h': [1, 17], 'm': [10, 28, 29], 'l': [3, 4], 'o': [9, 22], 'p': [11], 's': [0, 26, 33], 'r': [13, 31], 'u': [27], 't': [16, 21], 'y': [37], '?': [38]}