Python 无法更改列表中列表的内容。有人能解释为什么吗?
我有一个月变量,它是元组列表的列表。每个列表表示一周,每天是一个月中的一天和一周中的一天的元组。我想把我的月份列成一张月日清单。我试着这样做:Python 无法更改列表中列表的内容。有人能解释为什么吗?,python,list,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 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 = [[day[0] for day in week] for week in month]
若要替换整个月列表,或使用中所述的enumerate。否,您正在迭代的变量决不是C++引用中的引用 您应该将for循环理解为 显然,第二次作业不会影响本月的内容 你可以直接写
month = [[day[0] for day in week] for week in month]
要替换整个月列表,或使用中所述的枚举,python中的赋值仅是将名称附加到对象,它不是对对象本身的操作,但不要将其与获取/设置对象的属性混淆 如果你有
x = [1,2,3]
y = x[1]
那么y将仅仅是2,并且失去对它来自的列表的所有引用。改变y不会改变x。为此,请正确地索引x
在您的例子中,您希望迭代月的索引并分配给适当的条目
for index, week in enumerate(month):
month[index] = [day[0] for day in week]
python中的赋值仅仅是将一个名称附加到一个对象上,它不是对对象本身的操作,但不要将其与获取/设置对象的属性相混淆 如果你有
x = [1,2,3]
y = x[1]
那么y将仅仅是2,并且失去对它来自的列表的所有引用。改变y不会改变x。为此,请正确地索引x
在您的例子中,您希望迭代月的索引并分配给适当的条目
for index, week in enumerate(month):
month[index] = [day[0] for day in week]
为什么不只是:
>>> foo = []
>>> for week in month:
... foo.append([day[0] for day in week])
...
>>> foo
[[1, 2], [3, 4]]
易于阅读,易于理解,…为什么不:
>>> foo = []
>>> for week in month:
... foo.append([day[0] for day in week])
...
>>> foo
[[1, 2], [3, 4]]
简单易读,简单易懂,通过给week赋值,您可以更改变量绑定的内容,而不是列表包含的内容。要在不做很多更改的情况下完成您想做的事情,请执行以下操作:
for week in month:
week[:] = [day[0] for day in week]
它将在周内将结果分配给指定的范围-在本例中,是整个范围,替换所有现有元素。通过将某些内容分配给周,您可以更改变量绑定的内容,而不是列表包含的内容。要在不做很多更改的情况下完成您想做的事情,请执行以下操作:
for week in month:
week[:] = [day[0] for day in week]
它将在一周内将结果分配到一个指定的范围-在本例中,是整个范围,替换所有现有元素。我知道我可以解决我的问题,我只是想知道为什么我这样做不起作用,以及正确的方法是什么。好的。但你为什么要这样做呢。我想这不是Python的Python禅:简单比复杂好;我知道我可以解决我的问题,我只是想知道为什么我这样做不起作用,什么是正确的方法。但你为什么要这样做呢。我想这不是Python的Python禅:简单比复杂好;