每個人在使用python的過程中都會遍歷list和dict.
list遍歷
最常用最簡單的遍歷list的方法12
345a = ["a", "b", "c", "d"]
# ****** iterate
for i in a:
print i
但是, 如果我需要拿到list的index, 很多人可能會這樣寫12
345a = ["a", "b", "c", "d"]
# index & value
for i in xrange(len(a)):
print i, a[i]
其實, python提供了乙個方法enumerate, 用法如下12
345a = ["a", "b", "c", "d"]
# iterate with index
for i, el in enumerate(a):
print i, el
上面兩種方式的結果相同12
340 a1 b
2 c3 d
這是一種更加方便便捷的方式, 雖然少寫不了幾個字元, 從**可讀性等方面來考量的話, 還是清晰很多的.
**應該讓人一目了然, 目的明確, 如果多種方式可以實現相同的功能, 那麼我們應該選擇一種大家更加容易理解的, enumerate就是這樣的方式.
1enumerate(iterable[, start]) -> iterator for index, value of iterable
第二個引數在很多時候也是很有用的, 比如我不希望從0開始, 希望從1開始12
345a = ["a", "b", "c", "d"]
# iterate with index
for i, el in enumerate(a, 1):
print i, el
輸出如下12
341 a2 b
3 c4 d
如果你使用range的話, 會蹩腳很多.
dict遍歷
dict最簡單的遍歷方式12
3456
7d =
for k in d:
print k
for k in d:
print k, d[k]
上面遍歷k和v的方式並不好, 顯得很蹩腳. dict本身提供了iteritems()方法, 可以做到k,v對遍歷.12
345d =
# d.viewitems()
for k, v in d.iteritems():
print k, v
dict還有個viewitems方法, 這個直接看到的是全部k,v對.
iteritems和viewitems的區別是什麼? 可以模擬range和xrange的區別.
大家肯定都了解range和xrange的區別, 在遍歷的時候盡量使用xrange, 特別是當遍歷的範圍比較大的時候.12
3456
78in [1]: print range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
in [2]: print xrange(10)
xrange(10)
in [3]: print type(xrange(10))
range是直接返回乙個儲存全量資料的list, 空間複雜度是o(n), 而xrange是在遍歷中不斷生成的, 遍歷的效率更高, 而且空間複雜度是o(1) (個人理解, 沒看過具體實現).
iteritems和viewitems都可以完成遍歷, 二者的不同用下面的**來說明12
3456
78d =
# d.viewitems()
for k, v in d.iteritems():
print k, v
print type(d.viewitems()), type(d.itervalues())
print d.viewitems(), d.itervalues()
輸出如下12
3456
a 1c 3
b 2d 4
dict_items([('a', 1), ('c', 3), ('b', 2), ('d', 4)])
viewitems直接返回的是[('a', 1), ('c', 3), ('b', 2), ('d', 4)], 熟悉dict建構函式的人應該知道, 這也是一種構造dict的方式.12
d = dict(zip(("a", "b", "c", "d"), (1, 2, 3, 4)))
# d =
dict還有其他幾個方法12
34in [10]: import itertools
in [11]: ["".join(i) for i in itertools.product(("iter", "view"), ("keys", "values", "items"))]
out[11]: ['iterkeys', 'itervalues', 'iteritems', 'viewkeys', 'viewvalues', 'viewitems']
dict的完整示例**12
3456
78910
1112
1314
1516
1718
1920
2122
2324
2526
d = dict(zip(("a", "b", "c", "d"), (1, 2, 3, 4)))
# d =
for k in d:
print k
# d.viewkeys()
for k in d.iterkeys():
print k
print type(d.viewkeys()), type(d.iterkeys())
print d.viewkeys(), d.iterkeys()
# d.viewvalues()
for v in d.itervalues():
print v
print type(d.viewvalues()), type(d.itervalues())
print d.viewvalues(), d.itervalues()
# d.viewitems()
for k, v in d.iteritems():
print k, v
print type(d.viewitems()), type(d.itervalues())
print d.viewitems(), d.itervalues()
list方法 dict方法
d.get key,0 同dict key 多了個沒有則返回預設值,0。沒有則拋異常 d.has key key 有該鍵返回true,否則false d.keys 返回字典鍵的列表 d.values d.items d.update dict2 增加合併字典 d.popitem 得到乙個pair,並...
python中dict和list排序
1 list排序 列表的排序是python內建功能,自身含有sort方法 如 s 2,1,3,0 s.sort 0,1,2,3 2 dict排序 對字典的排序,因為每乙個項包括乙個鍵值對,所以要選擇可比較的鍵或值進行排序 sorted iterable cmp key reverse cmp和key...
pandas 讀取dict和list操作
在用pandas讀取dict和list的時候,依據結構和需求不同,我們可能需要生成不同格式的dataframe,這裡我總結了下我最近遇到的一些讀取操作 這裡我們以乙個字典為資料,看下不同操作的結果有何不同 data 1 直接呼叫dataframe進行讀取的話,生成的dataframe結構如下 或者p...