Python 列表与范围

1 投票
2 回答
4065 浏览
提问于 2025-04-17 13:23

假设我有一个代表某个国家预期寿命的年龄列表:

ages= ['70.37668898', '72.15779044', '73.25278702', '72.18979793', '80.73137673','55.43124818' '54.16265064', '54.16540964', ...]

现在我有一些预期寿命的范围,这些范围是从48到100,每两个年龄为一个范围,像这样:

48-50,50-52, ...., 98-100

我想创建一个新列表,这个列表里每个年龄都有一个对应的子列表。 这个子列表里,如果某个年龄在预期寿命范围内,就放一个1;如果不在范围内,就放一个0。

所以最后的结果大概是这样的:

每个子列表对应一个年龄来自于年龄列表

[[0,0,0,0,1, ..., 0],[0,1,0,0,0, ..., 0],...] 

我该怎么做呢?

2 个回答

1
ages = [70.37668898, 72.15779044, 73.25278702, 72.18979793, 80.73137673, 55.43124818, 54.16265064, 54.16540964]
[[int(age >= 48+2*i and age <50+2*i) for i in range(25)] for age in ages]

结果是

[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]

这可能就是你想要的。

5

你对范围的结构描述得有点模糊。我们假设你的范围是这样的:

ranges = [(48,50),(50,52),...(98,100)]

现在

ages= ['70.37668898', '72.15779044', '73.25278702', '72.18979793', '80.73137673','55.43124818' '54.16265064', '54.16540964', ...]

result = [ [ 1 if (r[0] <= age <= r[1]) else 0 for r in ranges] for age in ages]

或者,如果你的范围是固定的,从50到100,每次增加2,你可以使用生成器:

result = [ [ 1 if (r[0] <= age <= r[1]) else 0 for r in ( (i-2,i) for i in range(50,100,2)) ] for age in ages]

撰写回答