如何根据给定数字列表中的模式生成随机数?

时间:2015-01-01 01:32:30

标签: python random numbers

我试图根据我将提供的列表生成x个随机数(包含我想要生成的相同数量的数字)。 到目前为止,我有这段代码:

import random
list = []

while len(list) < 10:
    x = random.randint(1, 100)
    if x not in list:
        list.append(x)

list.sort()
print (list)

问题是,如何输入我所拥有的列表,以便Python可以读取某些模式(缺少更好的单词)并生成数字? 试过谷歌,到目前为止一无所获。 感谢。

1 个答案:

答案 0 :(得分:0)

使用python可以使用str.split()读取文件并将空格拆分为列表,不带这样的参数:

lines = [] 
for line in open('filename'):
    line = line.strip().split() # splits on whitespace
        for token in line:
            lines.append(token)

如果文件有一个不同的分隔符,例如冒号,如果分隔符是一个字符或固定的字符序列,则使用split(&#39; char&#39;)就像拆分一样(&#39;) ;:&#39;)或拆分(&#39; charseq&#39;),如拆分(&#39; ===&#39;),或者可以使用re.split将其拆分为正则表达式( &#39; some_regex&#39;&#39; text2split&#39)。此外,验证数字数据的格式以确保无效数据不会在后续处理中导致错误或其他不良行为可能很有用。

下面是一个完整的例子,用于从文件中提取逗号分隔的数字并将它们附加到列表中,并且数字被过滤以匹配常规表达式定义的三种形式中的至少一种:(1)&#39; \ d +&#39; (超过一位十进制数字); (2)&#39; \ d +。\ d *&#39; (超过一个十进制数字后跟一个句点后跟零个或多个十进制数字;或者(3)&#39; \ d *。\ d +&#39;(零个或多个十进制数字后跟一个句点后跟一个或者更多的十进制数字。在这个例子中,编译了这些表格中匹配数字的正则表达式,以提高性能。

import re
numList = []
regex = re.compile('^(\d+)|(\d+\.\d*)|(\d*\.\d+)$')
for data in open('filename'):
    tmpList = re.split(',',data.strip()) # could use data.strip().split(',')
    for element in tmpList:                   
    if regex.match(element):
        numList.append(element)

运行之后,numList中的数字可以像这样迭代:

for item in numList:
    print(item)
    # do other things such as calculations with item