Python列表长度不符合预期:计算值86为何实际返回100?
问题原因分析
你遇到的问题核心出在np.linspace()的默认行为上,咱们一步步拆解:
- 首先,你预期的年龄范围是18到60的所有整数,一共是
60-18+1=43个,乘以两种性别后总长度应该是86。 - 但
np.linspace(18,60,dtype=int)并没有生成18到60的所有整数!linspace的默认参数是生成50个均匀分布的数值(num=50是默认值),你通过dtype=int把这些数值转成整数后,会出现大量重复值,最终这个年龄列表的长度是50,而非你预期的43。 - 这样一来,性别循环(M和F)乘以50个年龄,总长度就是
2*50=100,和你看到的结果完全一致。
解决方法
要生成18到60的所有连续整数,应该用np.arange()——它是按步长生成序列的(默认步长1),注意arange是左闭右开区间,所以要写成np.arange(18, 61)才能包含60:
import numpy as np series = ['{0}{1:02d}'.format(gender, age) for gender in ['M','F'] for age in np.arange(18, 61)] print(len(series)) # 输出86,符合预期
也可以不用numpy,直接用Python原生的range(18, 61),效果完全一样:
series = ['{0}{1:02d}'.format(gender, age) for gender in ['M','F'] for age in range(18, 61)] print(len(series)) # 同样输出86
内容的提问来源于stack exchange,提问作者Ilonpilaaja
相关产品推荐
相关产品推荐

