y = (1212, 900, 730, 714, 650, 591, 565, 500, 450, 440, 430, 420, 407, 381, 324, 315, 283)
[尝试用Python编写代码以计算大于y列表中每个值的%的值。从数学上讲,每个值(第一个,第二个,第三个……直到n个总值)-1除以值的总数(在这种情况下为17个值),然后乘以100可以得到%。
例如:
没有大于1212的值,所以(1st-1/17)* 100 = 0
1值大于900,所以(2-1/17)* 100 = 5.8
2个值大于730,所以(3rd-1/17)* 100 = 11.8
依此类推……结果应该是(以%为单位)
x = (0, 5.8, 11.8, 17.7, 23.5, 29.4, 35.3, 41.2, 47.1, 52.9, 58.8, 64.7, 70.6, 76.5, 82.4, 88.2, 94.1)
另外两个答案使用list
理解,然后通过tuple
转换了结果,但是list
是不必要和浪费的,因为我们可以将等效的生成器表达式传递给tuple
:
y = (1212, 900, 730, 714, 650, 591, 565, 500, 450, 440, 430, 420, 407, 381, 324, 315, 283)
x = (lambda l: tuple(round(100 * i / l, 1) for i in range(l)))(len(y))
print(x)
[我还投入了lambda
,以防止像其他答案一样,对len(y)
中的每个元素都评估此y
的一线式(硬编码y
长度的代码除外!]
输出
> python3 test.py
(0.0, 5.9, 11.8, 17.6, 23.5, 29.4, 35.3, 41.2, 47.1, 52.9, 58.8, 64.7, 70.6, 76.5, 82.4, 88.2, 94.1)
>
此答案与其他答案一样,假定y
已被反向排序,但您的问题中未明确指出。您可能需要澄清。
尝试:
y = (1212, 900, 730, 714, 650, 591, 565, 500, 450, 440, 430, 420, 407, 381, 324, 315, 283)
y_perc = tuple([round(i/len(y)*100, 2) for i, _ in enumerate(y)])
print(y_perc)
# output: (0.0, 5.88, 11.76, 17.65, 23.53, 29.41, 35.29, 41.18, 47.06, 52.94, 58.82, 64.71, 70.59, 76.47, 82.35, 88.24, 94.12)
这里是一种使用方法:
y = (1212, 900, 730, 714, 650, 591, 565, 500, 450, 440, 430, 420, 407, 381, 324, 315, 283)
Y = tuple([round(n/len(y)*100,1) for n in range(len(y))])
print(Y)
输出:
(0.0, 5.9, 11.8, 17.6, 23.5, 29.4, 35.3, 41.2, 47.1, 52.9, 58.8, 64.7, 70.6, 76.5, 82.4, 88.2, 94.1)
y = (1212, 900, 730, 714, 650, 591, 565, 500, 450, 440, 430, 420, 407, 381, 324, 315, 283)
x = []
for i in y:
count = sum([1.0 for j in y if j > i])
x.append(round(count / len(y) * 100, 1))
print(tuple(x))
输出
(0.0, 5.9, 11.8, 17.6, 23.5, 29.4, 35.3, 41.2, 47.1, 52.9, 58.8, 64.7, 70.6, 76.5, 82.4, 88.2, 94.1)