计算python中范围之间的列表中的浮点数

时间:2018-11-17 19:19:30

标签: python python-3.x

我在这个任务上停留了一段时间。使用以下代码,我设法生成了1500个坐标,使我在0到2(x,y)之间浮动。

coordinates = [(random.random()*2.0, random.random()*2.0) for _ in range(15000)]
print(coordinates)

但是,现在我需要创建一个计数器来计算0到1之间的浮点数并将其输出给用户。香港专业教育学院试图使用If语句和while循环。我还窥探了互联网,无法找到任何有用的东西。有人知道如何解决这个问题吗?

亲切的问候。

2 个答案:

答案 0 :(得分:3)

如果x或/和y小于1,则可以在元组上使用简单的条件sum()并总结 1

import random

# your code used 15k tuples, your text says 1.5k - adapt the number to your liking
coordinates = [(random.random()*2.0, random.random()*2.0) for _ in range(1500)]

one_lower_1  = sum(1 for x,y in coordinates if x < 1 or  y < 1)
both_lower_1 = sum(1 for x,y in coordinates if x < 1 and y < 1)
x_lower_1    = sum(1 for x,_ in coordinates if x < 1)
y_lower_1    = sum(1 for _,y in coordinates if y < 1)

print(one_lower_1)
print(both_lower_1)
print(x_lower_1)
print(y_lower_1)

输出

1134
383
745
772

从本质上讲,这是一个生成器表达式,它仅从生成的if ....中过滤掉与coordinates之后的部分匹配的那些对。


我选择了sum(1 ... )方法,因为那样就不必创建一个列表来获取其len()了……如果只需要元素数量然后生成所有元素,则它对内存更友好元素。


使用jpp's评论的替代方法:

sum(x < 1 or  y < 1 for x,y in coordinates)

这之所以有效,是因为超过10个True的总和为10-每个True counting as 1

print(sum(True for _ in range(10))) # 10

答案 1 :(得分:0)

这应该使您入门。这是另一种列表理解,它检查您的坐标对列表,以查看每个x和y是否在(0,1)区间内。

from random import random

print(len([(x,y) for x,y in [(2*random(),2*random()) for _ in range(1500)] if 0 < x < 1 and 0 < y < 1]))

如果您的唯一目标是对所有对进行计数,以使x,y对在间隔(0,1)之内,则while循环将通过避免创建列表来提高效率。

def rand_coordinates(num_of_pairs):
"""Counts the number of randomly generated x,y 
pairs in the range of [0,2) where x and y are 
contained in the interval from (0,1)"""
count = 0
while num_of_pairs:
    x,y = 2*random(),2*random()
    if 0 < x < 1 and 0 < y < 1:
        count += 1
    num_of_pairs -= 1
return count