生成 100 个随机股价

Generating 100 Random Share Prices

我想通过为公司生成 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 个随机股价。可以在列表创建后保持列表不变的同时执行此操作(即使用某种种子)?

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() returns 随机 4 个字母名称的元组列表和 0 到 1 之间的随机数。我认为实际价格看起来会有所不同,但这就是您的开始方式。

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

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

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

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

尝试:

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 时,您将生成所需的股票名称。

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

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)

您可以通过在 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 个价格并创建 listtuple 将每个名称绑定到一个价格:

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