如何在 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]]
但它只是returns一个无效的语法错误
列表推导法-
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
引用一个新列表,而不是改变原始列表)。
如何在 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]]
但它只是returns一个无效的语法错误
列表推导法-
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
引用一个新列表,而不是改变原始列表)。