Python中使用for迴圈語句,為什麼輸出的結果不是按順序的?

時間 2021-05-30 14:15:49

1樓:

這是乙個有趣的問題,在 python3.6之前 dict 都是無序的,之後dict都是有序的,但是實際開發過程中,無法保證python版本的情況下,如何確保dict按照我們最初順序呢,這個時候可以通過 OrderedDict 保證我們字典順序保持不變,ps:使用 OrderedDict 需要先 import collections

2樓:

from collections import OrderedDict

xxoo = OrderedDict()

xxoo['a'] = 1

xxoo['b'] = 2

xxoo['c'] = 3

for i,j in xxoo.items():

print ('{} --> {}'.format(i,j))可以用這個模組弄個有序的

3樓:勃努力

前面基本上都說到字典是無序的了,我再具體講講為什麼無序吧。

1。字典的查詢效率很高,代價則是記憶體開銷較大。

對於數值型元素的查詢:逐個查詢的演算法複雜度是O(N);用MergeSort排序+二分法查詢的演算法複雜度是O(N*log(N));而用字典查詢的演算法複雜度接近O(1)。(當hash function沒有衝突時)。

2。字典是怎麼實現高效率查詢的。

字典對key值主要做了兩個處理:

用hash table將key值轉換成int

新建了乙個list,將key轉化的int作為作為index,value作為該index下的element。(這就是為什麼dict的開銷會更大)

3。所以你print出來的順序其實是hash table對映後的數值的順序

但是這個hash table取決於很多其他因素,包括編譯器版本、字典的增刪歷史等。所以實質上是non-random的。參照官方文件4.10.1

Keys and values are iterated over in an arbitrary order which is non-random, varies across Python implementations, and depends on the dictionary』s history of insertions and deletions

4樓:Revive

準確來說,python裡的字典不是無序的,它實際上有順序,但是這個順序是不確定的,一般情況下會和你輸入的不一致,但是你兩次遍歷該字典輸出的順序會是一樣的。

而真正無序的字典,比如Golang中的,兩次遍歷輸出的順序都可能不一樣,用起來特別麻煩……

5樓:張某某

你使用for迭代的是乙個dict字典型別的資料結構,它是一種無序結構,沒有sort物件方法,不同於list和tuple。所以你遍歷的時候也是沒有固定順序的。通常,為了使dict型別也能按照key排序輸出字典的話,在Python 3.

X後可以使用內建sorted函式:

for key in sorted(dict_type): print(key, '=', dict_type[key])

為什麼在 Mathematica 中使用迴圈是低效的?

yi feng 沒用過該軟體,僅從寫程式的角度來回答這個問題,若有偏頗或者錯誤請提醒或者摺疊。程式都有空間與時間之間的矛盾,也就是說某種資料結構及演算法在面對不同型別問題時不可能總是最省記憶體又算得最快的,但在面對某一類問題時是最好的。同一問題,該軟體有多種寫法,不同寫法在內部由不同演算法和資料結構...

Python 中的 for 迴圈如何使用?

python教程 python中的迴圈語句 for in python中的迴圈語句 while 不要把 Python 中的 for 語法當 C 語言裡面那種 for 迴圈來用,雖然我們習慣上還是說 for 迴圈,但Python 中 for 的語義不是迴圈,而是遍歷迭代器 對乙個迭代器 實現了 nex...

vscode中使用python相對路徑問題

sunshine 造成這個問題的直接原因是vscode這款編輯器。要回答這個問題,首先要明白python是如何工作的。這是通常情況下執行python的方法 在cmd裡,輸入python。python從硬碟載入到記憶體中,然後就可以執行指令了。此時是在C User 12502 這個目錄下開啟的pyth...