Python 用枚举列表A中的索引追加列表B
我是python新手。当我试图将列表字符串及其索引复制到由循环创建的列表变量时,返回的是一个空列表。但是,在复制列表之前打印它会返回我想要的所有数据 这个网站让我想到使用一个切片b=a[:]()。当我在同一个网站上使用这个技巧b=list(a)时,它也不起作用 我的目标是为用户输入字符串中的每个唯一字符创建一系列列表,其中只有一个列表。每个列表将以唯一字符开始,然后是原始用户字符串中该字符每次出现的索引Python 用枚举列表A中的索引追加列表B,python,list,dictionary,indexing,enumerate,Python,List,Dictionary,Indexing,Enumerate,我是python新手。当我试图将列表字符串及其索引复制到由循环创建的列表变量时,返回的是一个空列表。但是,在复制列表之前打印它会返回我想要的所有数据 这个网站让我想到使用一个切片b=a[:]()。当我在同一个网站上使用这个技巧b=list(a)时,它也不起作用 我的目标是为用户输入字符串中的每个唯一字符创建一系列列表,其中只有一个列表。每个列表将以唯一字符开始,然后是原始用户字符串中该字符每次出现的索引 for i, value in enumerate (xlist): exec "v
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]"""
找到了答案 作为对上述评论的回答,实现此类列表词典的简单方法如下:
string = 'efjseojfgiohgfiosjflk'
list_of_chars = dict()
for n in set(string):
list_of_chars[n] = [n]*string.count(n)
以上内容非常简单,易于阅读,并且允许以稳定的方式访问新创建的列表。它至少比使用邪恶的eval
和exec
编辑:我以为你想要的是索引,不是字符?我后来意识到了这一点,但显然这是“正确答案”。关于你需要什么样的答案,你发送的信息好坏参半
超级编辑:好的,现在你应该把你的正确答案作为正确答案。不要在不值得的地方给我荣誉!:) 在()上修改答案()后出现了一个解决方案 这是我的
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
输入:我能把你比作夏日吗
[5、7、15、20、23、23、25、34],“c’:[8],“e’:[14、18、18、19、19、30,”e’:[14、18、18、19、19、30],“d’:[35],,““:[2、12、12、12、24、24、24、36、36、36、36],,,,“[2,”a’:[8,”a’:[8,”a:[8,[8,,“e’:[14、18、18、18、18、18、18、18、18、19、19、19、19、19、19、19、19、30、30、30、,“d’:[35],,,“d’:[35],,,,,,,,““““,,,,,,,,,,,,,““““[35],,,,,,,,,,,,,,,,,,,,,,如果你想在循环中创建新变量,您真正需要的是一个包含列表或dict的变量。在这种情况下,您应该将内容添加到列表中,而不是
var0
,var1
,var2
,等等。您真的不应该使用exec和/或eval,除非您做的事情在我看来要低得多。动态地创建全局变量是一个糟糕、危险和低效的想法,为什么不创建一个列表或一个你想要的对象字典并传递它呢?我将重复这一点。不要使用eval
、exec
或global
。请参阅上面的其他评论。感谢您的反馈。我将研究如何创建对象词典。我的目标是为用户输入字符串中的每个唯一字符创建一系列列表,其中只有一个列表。每个列表都将以唯一字符开头,后跟原始用户字符串中该字符每次出现的索引。我对此强调得太多了-不要使用exec
,绝对不要使用eval
,并避免使用global
。
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