社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

在python中计算列表中介于一个范围之间的浮动数

Sarah • 4 年前 • 932 次点击  

我在这项任务上被困了一段时间。我使用下面的代码成功地生成了1500个坐标,使我的浮点值介于0和2(x,y)之间。

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

不过,现在我需要创建一个计数器,计算0到1之间的浮动数,并将其输出给用户。我试过使用if语句和while循环。我也在网上窥探过,找不到任何有用的东西。有人知道怎么解决这个问题吗?

谨致问候。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/42920
 
932 次点击  
文章 [ 2 ]  |  最新文章 4 年前
nick_14159
Reply   •   1 楼
nick_14159    5 年前

这会让你开始。这是另一个列表理解检查坐标对列表,看看每个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
Patrick Artner
Reply   •   2 楼
Patrick Artner    5 年前

你可以使用一个简单的条件 sum() 在你的元组上加起来 如果 x 或/和 y 比那小 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