Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 无法更改列表中列表的内容。有人能解释为什么吗?_Python_List - Fatal编程技术网

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禅:简单比复杂好;