Skip to main content
 首页 » 编程设计

python之如何在 Python 的一行中编写这个 for 循环

2025年05月04日15xiaohuochai

如何在 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'] 

如评论中所问-

Can you elaborate on the difference with 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 引用一个新列表,而不是改变原始列表)。