簡體   English   中英

如何在Python的一行中編寫此for循環?

[英]How to write this for loop in a single line in Python?

如何在Python中將以下內容寫為一行?

my_list = ['ab1c', 'fo2o', 'ba3r']
for i in xrange(len(my_list)):
    my_list[i] = my_list[i][1:3]

我試過了

my_list = [x for i in xrange(len(my_list)) my_list[i] = my_list[i][2:3]]

但它只會返回無效的語法錯誤

清單理解方法-

my_list[:] = [x[1:3] for x in my_list]

[:]用於使my_list進行適當的突變,就像您的for循環方法一樣。

演示-

>>> my_list = ['ab1c', 'fo2o', 'ba3r']
>>> my_list[:] = [x[1:3] for x in my_list]
>>> my_list
['b1', 'o2', 'a3']

根據評論中的要求-

您能用my_list = [x[1:3] for x in my_list]詳細說明一下嗎?

一個非常簡單的代碼示例來顯示差異-

>>> my_list = ['ab1c', 'fo2o', 'ba3r']
>>> a = my_list
>>> my_list = [x[1:3] for x in my_list]
>>> my_list
['b1', 'o2', 'a3']
>>> a
['ab1c', 'fo2o', 'ba3r']

上述方法導致-

>>> my_list = ['ab1c', 'fo2o', 'ba3r']
>>> a = my_list
>>> my_list[:] = [x[1:3] for x in my_list]
>>> my_list
['b1', 'o2', 'a3']
>>> a
['b1', 'o2', 'a3']

這是因為列表推導會創建一個新列表,當您在賦值運算符的左側使用my_list[:]時,您正在要求Python改變my_list的位置(但是當您執行my_list = <something> ,您只是在創建my_list請引用一個新列表,而不是對原始列表進行變異)。

暫無
暫無

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

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