【问题标题】:Generating 100 Random Share Prices生成 100 个随机股价
【发布时间】:2022-01-25 11:20:37
【问题描述】:

我想通过为公司生成 100 个随机 4 字母名称和相应的随机股价来构建 100 个随机生成的股价列表。

到目前为止,我已经编写了以下代码,它提供了一个随机的 4 个字母的公司名称:

import string
import random

def stock_generator():
    return ''.join(random.choices(string.ascii_uppercase, k=4))

stock_name_generator()

# OUTPUT
'FIQG'

但是,我想生成 100 个随机股价。是否可以在创建列表后保持列表不变(即使用某种种子)?

【问题讨论】:

  • 注意你为函数定义了一个名字,然后你用不同的名字调用了一个函数。然后,检查我的答案:)

标签: python python-3.x random return simulation


【解决方案1】:

我认为这种方法适合您的任务。

import string
import random

random.seed(0)

def stock_generator():
    return (''.join(random.choices(string.ascii_uppercase, k=4)), random.random())

parse_result =[]
n=100
for i in range(0,n):
    parse_result.append(stock_generator())

print(parse_result)

【讨论】:

  • 谢谢,这很好用,是否可以计算股价的平均值,因为parse_result 是列表列表?即计算第二列的平均值
  • 是的..它可能
【解决方案2】:
import string
import random


random.seed(0)


def stock_generator(n=100):
    return [(''.join(random.choices(string.ascii_uppercase, k=4)), random.random()) for _ in range(n)]


stocks = stock_generator()

print(stocks)

您可以使用此生成器表达式生成任意数量的随机股票。 stock_generator() 返回一个包含 4 个字母名称的随机元组和一个介于 0 和 1 之间的随机数的列表。我认为实际价格看起来会有所不同,但这是您开始的方式。

random.seed() 让您复制随机生成。

编辑:额外要求的平均股价

average_price = sum(stock[1] for stock in stocks) / len(stocks)

stocks[i][1] 可用于访问名称/价格元组中的价格。

【讨论】:

  • 感谢@Tobi208!我已经实现了这个方法,我想找到股价的平均值。由于变量stocks 是列表列表,是否可以这样做?
  • @codemachino 没问题,当然!我编辑了我的答案,这解决了吗?
【解决方案3】:

您可以通过在shuffle 之前更新randomseed 来生成一致的n 随机样本。这是一个关于如何生成这些名称列表的示例(10 个示例):

import random, copy

sorted_list = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
i = 0 #counter
n = 10 # number of samples
l = 4 # length of samples

myset = set()
while i < n:
    shuffled_list = copy.deepcopy(sorted_list)
    random.seed(i)
    random.shuffle(shuffled_list)
    name = tuple(shuffled_list[:l])
    if name not in myset:
        myset.add(name)
        i+=1
print(sorted([''.join(list(x)) for x in myset]))
# ['CKEM', 'DURP', 'GQXO', 'JFWI', 'JNRX', 'MNSV', 'OAXS', 'TIFX', 'VLZS', 'XYLK']

然后你可以随机生成n的价格数量,并创建一个tuples的list,将每个名称绑定到一个价格:

names = sorted([''.join(list(x)) for x in myset])
int_list = random.sample(range(1, 100), n)
prices = [x/10 for x in int_list]

names_and_prices = []
for name, price in zip(names,prices):
    names_and_prices.append((name,price))

# [('CKEM', 1.5), ('DURP', 1.7), ('GQXO', 6.5), ('JFWI', 7.6), ('JNRX', 0.9), ('MNSV', 8.9), ('OAXS', 5.0), ('TIFX', 9.6), ('VLZS', 1.4), ('XYLK', 3.8)]

【讨论】:

    【解决方案4】:

    试试:

    import string
    import random
    
    
    
    def stock_generator(num):
        names = []
    
        for n in range(num):
            x = ''.join(random.choices(string.ascii_uppercase, k=4))
            names.append(x)
    
        return names    
    print(stock_generator(100))
    
    
    

    每次使用您选择的数字作为参数调用函数 stock_generator 时,您都会生成所需的股票名称。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-16
      • 1970-01-01
      • 2020-06-17
      • 2021-03-31
      • 2017-12-24
      • 1970-01-01
      • 2023-01-03
      • 2016-07-07
      相关资源
      最近更新 更多