如何在Python中用单行编写这个for循环?

Ala*_*anH 1 python list-comprehension list

如何在Python中将以下内容编写为一行?

my_list = ['ab1c', 'fo2o', 'ba3r']
for i in xrange(len(my_list)):
    my_list[i] = my_list[i][1:3]
Run Code Online (Sandbox Code Playgroud)

我试过了

my_list = [x for i in xrange(len(my_list)) my_list[i] = my_list[i][2:3]]
Run Code Online (Sandbox Code Playgroud)

但它只返回无效的语法错误

Ana*_*mar 7

列表理解方法 -

my_list[:] = [x[1:3] for x in my_list]
Run Code Online (Sandbox Code Playgroud)

[:]被用来使其my_list在适当的位置发生变异,就像你的for循环方法一样.

演示 -

>>> my_list = ['ab1c', 'fo2o', 'ba3r']
>>> my_list[:] = [x[1:3] for x in my_list]
>>> my_list
['b1', 'o2', 'a3']
Run Code Online (Sandbox Code Playgroud)

正如评论中所述 -

你能详细说明它的区别吗? 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']
Run Code Online (Sandbox Code Playgroud)

上述方法导致 -

>>> 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']
Run Code Online (Sandbox Code Playgroud)

这是因为列表推导创建了一个新列表,当你my_list[:]在赋值运算符的左侧使用时,你要求Python my_list在适当的位置进行变异(但是当你这样做时my_list = <something>,你只是在my_list引用一个新列表,而不是改变原始列表).