2015-01-01 44 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進行兼容。 –