2013-01-22 34 views
1
Python列表

比方說,我有一個年齡的列表(即代表預期壽命的國家):與範圍

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],...] 

我怎樣才能做到這一點的時代?

+1

看看numpy數組。他們將允許您選擇符合您年齡段的年齡段。 – sean

+0

肖恩,這將是過度殺傷 – sharjeel

+0

@sharjeel:如果這是唯一的行動是做,是的,這絕對是矯枉過正。但是,這裏隱含的更大的工作似乎可能是'numpy'(可能加上'pandas')的工作。所以,值得一提的是。 – abarnert

回答

4

您的範圍結構有點含糊。讓我們假設你的範圍是像這些

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的增量開始,你可以使用發電機:

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] 
+1

如果r [0] <= age <= r [1] else 0'或int(r [0] <= age <= r [1]),爲什麼不只是'1?這是Python,而不是C. – abarnert

+0

謝謝。更新 – sharjeel

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]] 

這是(也許)你問什麼。