簡體   English   中英

Python函數亂序返回列表對象

[英]Python Function Returning List Objects Out of Order

我是Python語言的新手。 我了解大多數基本功能和理論,所有不同類別的對象及其行為/屬性等。

無論如何,我正在編寫基本功能以在實踐中探索不同的概念並更直觀地了解該語言。 特別是一個讓我煩惱! 任何人都可以分享為什么此結果與預期不符的任何見解嗎?

這是我運行的代碼:

test_list = [2, 4, 6]
def test_func(k):
    global x, y, z
    for n in k:
        k[k.index(n)] = n * 2
    x, y, z = k
    return k
test_func(test_list)
print(test_list)
print(x)
print(y)
print(z)

我期望結果是:

[4, 8, 12]
4
8
12

但是,實際結果如下:

[8, 4, 12]
8
4
12

列表中的前兩個項目似乎已被交換。

我看不出是什么原因造成的? 如果有人可以看到這里發生的事情,請分享見解!

謝謝,南奧斯卡

第一次迭代后,列表看起來像[4,4,6],因此k.index(4)返回0索引並將其乘以2。因此最終結果為[8,4,12]。

我認為您打算這樣做:

test_list = [2, 4, 6]
def test_func(k):
    global x, y, z
    for i in range(len(k)):
        k[i] = k[i] * 2
    x, y, z = k
    return k

您正在將索引與值混合,並使用index()查找數組中的位置是不正確的,這主要是因為您正在修改列表,並且會再次找到相同的元素,但在不同的位置,最好使用range以遍歷索引並檢索值。

同樣,使用全局變量也不是很酷。 實際上,整個過程應該像列表理解那樣寫-簡單而慣用:

[2 * x for x in test_list]
=> [4, 8, 12]

您可以將代碼壓縮為列表理解和解壓縮:

test_list = [2, 4, 6]
def test_func(k):
   global x, y, z
   x, y, z = [i*2 for i in k]
   return [x, y, z]

在第一次迭代中,第一個元素更改為4。在第二次迭代中,索引4為0而不是您期望的1。 嘗試這個:

test_list = [2, 4, 6]
def test_func(k):
    global x, y, z
    l = list()
    for n in k:
        print(n, k.index(n))
        l.append(n * 2)
    x, y, z = l
    return l
test_func(test_list)
print(test_list)
print(x)
print(y)
print(z)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM