簡體   English   中英

如何在Python中自動執行列表結構的算術運算?

[英]How can I automate arithmetic for a list structure in Python?

輸入:

['mia', 5, 10]
['mia', 20, 50]
['mia', 52, 101]
['mia', 220, 380]

我的代碼(可以正常工作,但我想讓它自動化,而無需一直手動輸入print ):

print lines[1][1] - lines[0][2]
print lines[2][1] - lines[1][2]

輸出:

10
2
119

為了使此打印過程自動化,我嘗試使用for循環:

for x in lines:
    print lines[x][1] - lines[x-1][2]

並收到錯誤: TypeError: list indices must be integers, not list

然后我嘗試了:

for int(x) in lines:
    print lines[int(x)][1] - lines[int(x)-1][2]

並收到錯誤: SyntaxError: can't assign to function call

我檢查了在python中從2D列表的所有元素中減去一個值,但這沒有幫助我弄清楚我的問題。

感謝您的幫助,以使我的算術過程自動化(使用for循環,以便我可以了解如何改進上面的代碼或其他結構)。 獎勵點,用於顯示如何定義函數或創建類定義以完成此任務。

在第一種情況下x in lines x表示x取每一行的值。 即,首先x = ['mia', 5, 10] ,然后x = ['mia', 20, 50] ...這不是您想要的。 您想要x = 0x = 1 ...

但是,通過嘗試通過寫int(x)來簡單地將x變成整數,您要說的是在循環的第一次迭代中將['mia', 5, 10]分配給int(x) ,依此類推。 但是左側是函數調用,這意味着將x轉換為int ,並且您不能為函數調用分配某些內容(在這種情況下為列表)。

您真正想要做的是更改循環表達式的右側。 您不想遍歷列表元素,而是要遍歷列表索引

for x in range(1,len(lines)):
    print lines[x][1] - lines[x-1][2]

嘗試此操作,只需將循環語句放入打印語句中,以便\\ n觸發

print '\n'.join(str(lines[x][1]-lines[x-1][2]) for x in xrange(1,len(lines)))

您也可以不使用索引range就發瘋:

for (first, second) in zip(lines[:-1], lines[1:]):
    print second[1] - first[2]

zipizipizip有一些細微差別)從給定的所有可迭代對象創建元組。 從文檔:

此函數[ zip ]返回一個元組列表,其中第i個元組包含每個自變量序列或可迭代對象中的第i個元素。

由於列表的順序是有保證的,因此這將導致元素因引入的切片而偏移。

在這里,第一個可迭代的是沒有最后一行的所有行,第二個可迭代的是除第一個(0索引)之外的所有行。

你應該做 :

for x in range(1,len(lines)):
    #do something

這將從1循環到len(lines) - 1

暫無
暫無

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

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