Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用枚举列表A中的索引追加列表B_Python_List_Dictionary_Indexing_Enumerate - Fatal编程技术网

Python 用枚举列表A中的索引追加列表B

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

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

这个网站让我想到使用一个切片b=a[:]()。当我在同一个网站上使用这个技巧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]"""

找到了答案

作为对上述评论的回答,实现此类列表词典的简单方法如下:

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