2015-01-01 43 views
-1

我试图根据我将提供的列表生成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可以阅读一些模式(在缺乏一个更好的词),并生成号码列表? 尝试谷歌它,到目前为止没有发现。 谢谢。

+4

输入列表究竟如何影响随机数的产生?你只是在寻找'random.shuffle'还是'random.sample'? – Blckknght

+0

你试过正则表达式吗?正则表达式可以真正帮你解决p atterns –

+3

你需要更清楚地描述你的问题。列表如何影响列表中的数字?你想让你的代码识别模式吗? – Madeline

回答

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(':')或split('charseq')中使用split('char')的字符或固定字符序列,则可以像split('===')那样进行拆分,或者可以使用re.split('some_regex','text2split')在正则表达式上拆分。此外,验证数字数据的格式以确保无效数据在后续处理中不会导致错误或其他不良行为可能很有用。

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

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  
+0

我认为你必须在字符串文字前加一个'r'或转义反斜杠。另外,'str.split'不适用于正则表达式。然而're'模块中有一个分割函数。 – SwiftsNamesake

+0

感谢您的信息。如果正则表达式根据https://docs.python.org/2/library/re.html?highlight=re.split#re.split进行单引号引用,则re.split()不需要预先加上'r'。我正在使用Python 2与Apache Spark进行兼容。 –