我想这与其说是一个问题,不如说是一个询问。你知道吗
在花了几个小时研究了一些python示例之后,我发现了一些让我质疑python列表理解如何工作的东西。我相信我已经掌握了这个概念。你知道吗
我知道以下是一样的:
ages = [19,15,16,72,43]
for t in range(len(ages)):
ages[t] = ages[t] + 1
以及:
ages = [19,15,16,72,43]
ages = [age +1 for age in ages]
两者都将年龄更改为[20、16、17、73、44],因为列表中的每个项目年龄都将改为等于value++
但在玩游戏和测试时我发现:
>>> agegroups = [[4, 10, 45, 55, 62, 99, 102], \
[19, 56, 64, 74, 10, 29], \
[14, 75, 18, 19, 54, 29,2]]
>>> agegroups = [age.sort() for age in agegroups]
>>> agegroups
[None, None, None]
将年龄组中每个列表的值设置为“无”]
但是使用下面的命令将对年龄组中的每个列表进行排序。你知道吗
>>> agegroups = [[4, 10, 45, 55, 62, 99, 102], \
[19, 56, 64, 74, 10, 29], \
[14, 75, 18, 19, 54, 29, 2]]
>>> [age.sort() for age in agegroups]
[None, None, None]
>>> agegroups
[[4, 10, 45, 55, 62, 99, 102], [10, 19, 29, 56, 64, 74], [2, 14, 18, 19, 29, 54, 75]]
我假设在前面的尝试中,agegroups中的每个列表都被分配了返回值年龄.排序()。我说的对吗?你知道吗
请随意打我,新的在这里,只是踏入Python线圈。你知道吗
是的,
list.sort()
的返回值总是None
,列表理解取列表中每个项的初始表达式的值。在例如[x for x in list]
的情况下,初始表达式是x
,因此x
的值被放入结果列表中。在[x.sort() for x in lists]
的情况下,初始表达式是x.sort()
,因此x.sort()
(即None
)的值进入结果列表。当然,子列表是先排序的。你知道吗您可以使用
sorted()
内置函数制作一个排序后的副本以放入列表:或者可以使用此构造首先调用
x.sort()
,然后返回x
,将排序后的x
放入结果列表:这是因为
x.sort()
总是返回None
,None
是false,所以or
的另一个分支总是被求值并返回值x
。你知道吗您可以做的最后一件事是只使用生成器表达式并让它被
any()
内置函数使用。你知道吗这会对每个子列表进行排序,但不会对它们消失的
None
值做任何处理。未创建新列表。any()
在第一个truthy值处停止,并且从不存在任何truthy值,因为x.sort()
总是返回None
,这是错误的,因此在这种情况下any()
保证遍历整个生成器。any()
返回True
或(在本例中)False
,我们也将其丢弃。因此您会发现lists
中的每个子列表都已排序,lists
包含子列表的顺序与之前相同,因为它没有更改。基本上与以下内容相同:列表的排序方法是就地方法,这意味着它不返回值,但会影响列表的顺序。您应该尝试改用sorted方法,该方法类似,但它确实返回一个值:
你知道吗列表.排序()是一个自变异方法,它不返回任何内容,因此不返回任何内容。列表.排序()对列表本身进行操作并更改其状态。你知道吗
如果您想获得每个列表的克隆,最好使用sorted(list)
相关问题 更多 >
编程相关推荐