我正在观看如何使用 python 绘制直方图并遇到此语句,但我不确定它的含义或工作原理。
population_ages = [22,55,62,45,21,22,34,42,42,4,99,102,110,120,121,122,130,111,115,112,80,75,65,54,44,43,42,48]
ids = [x for x in range(len(population_ages))]
我不确定这个声明是如何工作的。我已经尝试观看有关 len 和 range 工作原理的视频,但仍然不确定它如何应用于此语句。
ids = [..... range(len(population_ages)]
请您参考如下方法:
其他答案已经涵盖了基础知识。
我想补充一下
ids = [x for x in range(len(population_ages))]
是
的特化[x for x in iterable]
这不是很有用因为
- 它生成
x,未从可迭代对象转换 - 无论如何它都会产生一些东西。
列表理解在这种情况下更有用:
[f(x) for x in iterable if condition(x)]
如果您真的想要一个列表,通过将可迭代对象传递给 list 对象来创建它会更好更快:
list(range(len(population_ages)))
(在 python 2 中,range(len(population_ages)) 就足够了,因为它直接返回一个 list,但是如果你的代码不能移植到 python 3你真的需要一个可订阅的对象。)
另请注意,操作索引通常是错误的来源。 Python 有很多不使用索引的方式(不像 C 语言)。几个例子:
- 它可以对值本身进行迭代
- 它可以使用
enumerate(iterable) 迭代索引+值
- 可以使用
zip或itertools.zip_longest并行处理大小相当的迭代器 - 有内置词典
所以在使用索引之前请三思。可能有更好的方法。
