python - 无法在列表中更改列表的内容。谁能解释为什么?

标签 python list

我有一个月份变量,它是元组列表的列表。每个列表代表一个星期,每一天都是一个月中的一天和星期几的元组。我希望让我的月份成为月日列表的列表。我试着这样做:

for week in month:
    week = [day[0] for day in week]

对于 [[(1, 1), (2, 2)], [(3, 3), (4, 4)]] 我希望得到 [[1 , 2], [3, 4]],但列表没有改变。根据我对 python 的理解,我的代码非常好,那么我错过了什么? week 不是指一个月中的每一周吗?

最佳答案

不,您迭代的变量永远不是“引用”(如 C++ 的引用)。

您应该将for 循环理解为

month_iter = iter(month)
try:
  while True:
    week = next(month_iter)
    # here begins your code
    week = [day[0] for day in week]
    # here ends your code
except StopIteration:
  pass

很明显,第二次赋值不会影响month的内容。

你可以写

month = [[day[0] for day in week] for week in month]

替换整个 month 列表,或使用 enumerate,如 @Ivo's answer 中所述.

关于python - 无法在列表中更改列表的内容。谁能解释为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3590222/

相关文章:

list - 如何使用 Kotlin 就地过滤列表?

python - 棋盘游戏:找到带有限制的红点的最大绿点

python - Graphlab 和 numpy 问题

python - Jupyter Notebook 找不到适用于 python 3.6 的模块

python - 如果我知道该元素或类的 ID,如何在某些 HTML 元素中使用 Beautiful Soup 设置值?

python - 将一个列表中的元素匹配到另一个列表,跳过已经匹配的元素,Python

python - 递增列表索引 if 条件

python - 检查四的幂 - 边缘情况

C++ 通过 nullptrs 标记要在 STD 列表中删除的对象

java - 列表.add ("stuff");崩溃