2012-10-23 48 views
0

我试图用最简单的方法来计算所有出现的x字典,但没有结果。 我不能导入任何库,也不使用其他语句:var in,如果是x,如果不是,如果是。查找多次出现的字典?

结果脚本应该是这样的: 例如:

list = [1,2,1,'a',4,2,3,3,5,'a',2] 

code 

print occurrences(list) 

result 

1 = [0, 2] 
2 = [1, 5, 10] 
a = [3, 9] 
and so on 

@edited 修正文本

+3

[你尝试过什么?](http://whathaveyourtried.com)另外,请澄清你的问题 - 什么是圈子中? – thegrinner

+0

我的意思是“if statment”和“for statment” – user1768615

回答

0

OK,不使用任何库或功能:

lis = [1,2,1,'a',4,2,3,3,5,'a',2] 
dic={} 
index=0 
for item in lis: 
    if item in dic: 
     dic[item]+=[index] 
     index+=1 
    else: 
     dic[item]=[index] 
     index+=1 
print dic 

输出:

{'a': [3, 9], 1: [0, 2], 2: [1, 5, 10], 3: [6, 7], 4: [4], 5: [8]} 
+0

为什么你在这两种情况下使用2x索引+ = 1? @edit 只添加“if”并删除“else” – user1768615

+0

'enumerate'更方便手动计算'index'。 –

+0

我正在尝试使用str.index(),但它只是返回我只有第一个索引,并忽略了所有休息... 可以这么友好给我一个枚举的例子,请? – user1768615

4
>>> l = [1,2,1,'a',4,2,3,3,5,'a',2] 
>>> pos = {} 
>>> for i, n in enumerate(l): 
...  pos.setdefault(n, []).append(i) 
... 
>>> pos 
{'a': [3, 9], 1: [0, 2], 2: [1, 5, 10], 3: [6, 7], 4: [4], 5: [8]} 
>>> for k, v in pos.items(): 
...  print "%s = %s" % (k, v) 
... 
a = [3, 9] 
1 = [0, 2] 
2 = [1, 5, 10] 
3 = [6, 7] 
4 = [4] 
5 = [8] 
+0

很好的解决问题的办法。 可以解释我使用2x变量,“我,n”,请吗? – user1768615

+0

@ user1768615'enumerate'将返回带有元组'(位置,元素)'('[(0,1),(1,2),(2,1),...]'')的迭代器。 '我,n'语法只是一个多重任务:位置为'i',元素为'n'。 –

+0

是不是更简单的使用范围()代替枚举? – user1768615