2014-06-21 57 views
0

我是python新手。當我試圖將列表字符串及其索引複製到由循環創建的列表變量時,我返回一個空列表。但是,在複製之前打印列表將返回所需的所有數據。從列舉的列表的索引追加列表B A

本網站給了我一個使用切片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 

答案已找到!

+1

每當你想要創建循環中的新變量,你真正需要的是一個變量,它包含一個列表或字典。在這種情況下,你應該把它們附加到列表中,而不是'var0','var1','var2'等等。 – user2357112

+3

你真的不應該使用exec和/或eval,除非你在我看來做的事情要低得多。動態創建全局變量是一個*糟糕的*,危險和低效的想法,爲什麼不創建一個你想要的對象的列表或字典並將其傳遞? – Kamikai

+2

我只是重複這一點。 **不要**使用''eval'',''exec''或''global''。見上面的其他評論。 –

回答

1

一個解決方案修改上(Python dictionary that maps strings to a set of strings?

這裏的答案(https://stackoverflow.com/a/2285887/3761932)後,來到這就是我

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',30','d':[35],''「:[32],'i':[6],'h':[1,17],'m':[10 ,'28','1':[3,4],'o':[9,22],'p':[11],'s':[0,26,33],'r': [13,31],'u':[27],'t':[16,21],'y':[37],'?':[38]}

0

作爲回答上面的評論,來實現這樣的列表的字典一個簡單的方法是這樣的:

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

以上是相當簡單的,人類可讀的,並允許一個穩定的方式來訪問新創建的列表。它至少比使用邪惡evalexec

更好編輯:我以爲你想索引,而不是字符?我後來意識到這一點,但顯然這是'正確答案'。你發送了關於你需要什麼答案的混合信息。

SuperEdit:好的,現在你應該把你的正確答案作爲的正確答案。不要給我信任它不適合的地方! :)

相關問題