獲得python的list中含有重複值的index
阿新 • • 發佈:2019-01-08
關於怎麼獲得,我想其實網上有很多答案。
list.index( )獲得值的索引值,但是如果list中含有的值一樣,例如含有兩個11,22,這樣每次獲得的都是第一個值的位置。
那麼怎麼去解決這個問題呢?
下面的程式對這個問題做了一定的解答
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author : SundayCoder-俊勇
# @File : listlearn.py
# 怎麼獲得list中的相同值的索引值
# 請看下列程式
s = [11, 22, 33, 44, 22, 11]
print s.index(11)
# 此時輸出0
print s.index(22)
# 此時輸出1
# 那怎麼才能得到11,22相同的值的索引值呢?
# 有人說用dict(字典),這個方法也可以
# 有人說用defaultdict
# 程式如下:
from collections import defaultdict
d = defaultdict(list)
for k,va in [(v,i) for i,v in enumerate(s)]:
d[k].append(va)
print d
# 輸出的結果如下:defaultdict(<type 'list'>, {33: [2], 11: [0, 5], 44: [3], 22: [1, 4]})
# 但是有沒有一個更加簡單的方法呢?
# 有的,那就是”偷樑換柱“,用一個s1來複制s。
s1 = s
i = s1.index(11)
s1[i]=55
# 替換s1的11為55(不一定是55只要是列表中沒有的數值就可以)
# 再列印s1
print s1
# 輸出[55, 22, 33, 44, 22, 11]
# 下一步可以得到11的位置了
print s1.index(11)
# 輸出為:5