Python中for循环赋值问题请教一下?

像这个表达式 为什么 c = [2,2] 而不是 [1,2]

20180516232544


Python中for循环赋值问题请教一下?
17 回复

list 传的是指针


问题核心: 在Python的for循环中直接修改循环变量,并不会影响你正在遍历的原始列表(或其他可迭代对象)。这是因为循环变量只是当前迭代项的一个引用副本。

代码示例与解释:

假设你有一个列表,想在循环里把每个元素都加1,新手常会这么写,但这是无效的:

my_list = [1, 2, 3, 4]
for item in my_list:
    item = item + 1  # 这行没用!修改的只是临时变量item
print(my_list)  # 输出:[1, 2, 3, 4],列表根本没变

正确方法:

你需要通过索引来直接修改列表中的元素:

my_list = [1, 2, 3, 4]
for i in range(len(my_list)):
    my_list[i] = my_list[i] + 1  # 通过索引直接赋值
print(my_list)  # 输出:[2, 3, 4, 5]

或者,更Pythonic的写法是使用列表推导式,一行搞定:

my_list = [x + 1 for x in my_list]
print(my_list)  # 输出:[2, 3, 4, 5]

总结: 想改原列表,就得通过索引或者重建它。

才学疏浅,没看懂

前一个 y 和后一个 y 不是一个东西,写这个代码的建议拖出去打死

展开
for x in y:
for y in a:
c.append(x)

因为还有段代码没贴出来啊


c = [x for x in y for y in a] 好奇是如何做到不报错的?

写反了

#6 估计楼主定义了一个 y 全局变量

如果完全第一次运行的话,第一个 y 那里是要出错的(未定义),你可以运行出来是因为 y 是本来已经有值了。你可以 print ( y )看一下

你要的是:
c = [ y for x in a for y in x]

先把单展开的列表解析弄清楚再尝试多展开吧…

列表生成式写错了啦

会报错吧

你前面用过 y 这个变量,这里的后面一个 y in a 是没卵用的

执行顺序的问题

楼主注意一下,在列表解析(推导)式中的双层 for 循环和直接用循环语句的层次是一样的。
c = []
for y in a:
□□□□for x in y:
□□□□□□□□c.append(x)


c = [ x for y in a for x in y]

回到顶部