2014-04-27 140 views
0

所以我的功能RandList(n)應該返回一個列表n元素。然而,當我運行它時,它給了我列表L中的元素2 * n有人可以幫助我嗎?提前致謝。列表中的隨機元素 - Python

import random 

def randList(n): 
    counter = 0 
    L =[] 
    while counter < n: 
    L += str(random.randrange(0,100)) 
    counter += 1 
    return L 

print randList(1) 
print randList(5) 
print randList(10) 

回答

2

當你做L += str(random.randrange(0,100)),Python解釋意識到str(random.randrange(0,100))是一個迭代,所以它增加了從它的所有元素(所有字符,因爲它是一個字符串)L

嘗試L += [str(random.randrange(0,100))]L.append(str(random.randrange(0,100)))

最終代碼:

def randList(n): 
    counter = 0 
    L = [] 
    while counter < n: 
     L += [str(random.randrange(0,100))] 
     counter += 1 
    return L 
2

您應該使用append代替:

當你做list += string你基本上是添加字符串列表中的獨立元素的所有字符。 ([] + 'hello' --> ['h', 'e', 'l', 'l', 'o']

正確的代碼

import random 

def randList(n): 
    counter = 0 
    L =[] 
    while counter < n: 
     L.append(str(random.randrange(0,100))) 
     counter += 1 
    return L 

print randList(1) 
print randList(5) 
print randList(10) 
+0

你能修理你的縮進嗎? – Luigi

+0

@路易斯,啊對不起。完成。謝謝 – sshashank124

1

當你比較平時要注意(總和,乘...)非均質類型。
frostnational和sshashank124解釋了你的代碼失敗的原因。
這裏有兩個較短的解決方案(取決於你的使用情況):

import random 

lr = [random.randrange(0, 101) for i in range(n)] # has repetitions 
lnr = random.sample(range(101), n) # has no repetition 

注意,這些列表不包含字符串,但你可以很容易地調整代碼。
另請注意,lr是list comprehension