正如標題所暗示的那樣,我想填充兩個單獨的列表,每個列表都有自己的隨機長度和使用列表理解的內容,如下所示:使用列表理解填充隨機數的兩個數組,使用列表理解
a, b = [random.randint(1,100), random.randint(1,100) for x in range(random.randrange(1,10))]
它可以在一行中完成嗎?如果是的話,我該怎麼辦呢?
謝謝
正如標題所暗示的那樣,我想填充兩個單獨的列表,每個列表都有自己的隨機長度和使用列表理解的內容,如下所示:使用列表理解填充隨機數的兩個數組,使用列表理解
a, b = [random.randint(1,100), random.randint(1,100) for x in range(random.randrange(1,10))]
它可以在一行中完成嗎?如果是的話,我該怎麼辦呢?
謝謝
首先,你想重複兩次相同的功能,而不是分別創建兩個數組。所以,讓我們寫一個函數random_array
現在,我們可以使用random.choice(range(int))
來選擇一個隨機數,例如,
>>> choice(range(10))
7
或者,我們可以使用random.randint(0, 10)
太:
>>> random.randint(0, 10)
5
然後,我們可以隨機選擇N無。使用random.sample
給出一個整數範圍:
>>> n = 5
>>> random.sample(range(10), n)
[3, 2, 1, 9, 4]
因此,使用random.sample
和random.choice
:
>>> from random import sample, choice
>>> def random_array(maxsize, maxint):
... return sample(range(maxint), choice(range(maxsize)))
...
>>> random_array(10, 100)
[12, 9, 62, 48, 11, 44, 58, 52, 1]
>>> random_array(10, 100)
[97, 78, 33, 3]
或者random.randint
和random.sample
:
>>> from random import randint, sample
>>> def random_array(maxsize, maxint):
... return sample(range(maxint), randint(0, maxsize))
...
>>> random_array(10, 100)
[27, 50, 95, 18, 4, 30, 73, 47]
或者使用numpy
:
>>> import numpy as np
>>> np.random.rand() # Random float between 0.0 to 1.0
0.7796560918112618
>>> np.random.rand(2)
array([ 0.75680381, 0.20146147])
>>> np.random.rand(2) # Random array of size 1x2 (column X row)
array([ 0.81612505, 0.42277987])
>>> np.random.rand(random.randint(0, maxsize)) # Random size array of len < maxsize
array([ 0.83846215, 0.77637599, 0.85086381, 0.03674837])
>>> np.random.rand(random.randint(0, maxsize)) # Random size array of len < maxsize
array([ 0.26468399, 0.0472708 , 0.83615985, 0.20740113, 0.40436625,
0.84332336, 0.48814732, 0.39267764, 0.30662132])
>>> np.random.rand(random.randint(0, maxsize)) * 100 # Random size array of len < maxsize and max value < 100
array([ 80.85771169, 50.49196633, 21.01646636, 36.15074652,
97.98209728, 85.68512275, 58.06013557, 23.93219465,
5.18467685, 12.77761391])
如果你想有一個單排:
a = sample(range(100), choice(range(10)))
如果你真的想在一行中創建不同的列表,然後你指的是一個嵌套列表:
import random
l = [[random.randint(1, 100) for b in range(random.randint(1, 100))] for i in range(2)]
然而,如果您只是想要兩個單獨的列表,則需要兩行:
l1 = [random.randint(1, 100) for b in range(random.randint(1, 100))]
l2 = [random.randint(1, 100) for b in range(random.randint(1, 100))]
我覺得你很接近。它可以是'a,b = [[random.randint(1,100)爲範圍內的b(random.randint(1,100))] i爲範圍(2)]' – user3764893
製造是這樣工作的
a, b = [random.randint(1,100) for x in range(random.randrange(1,10))], [random.randint(1,100) for x in range(random.randrange(1,10))]
根據上面的一些評論,這可能不是一個好主意。任何人都在意解釋爲什麼這是什麼?
'可讀性比事情進展空間較小。如果我想要,我可以在一行上編寫整個程序 - https://onelinepy.herokuapp.com/ –
你在問爲什麼這不是一個好主意。因爲閱讀起來要困難得多。你正在嘗試做兩件獨立的事情,所以他們應該分開行。此外,這會打亂線條的長度,再次使閱讀變得更加困難(順便說一下[PEP 8](https://www.python.org/dev/peps/pep-0008/#maximum- line- length )表示最大線長度爲79)。有兩條線是沒有缺點的,所以它是相反的,你應該證明爲什麼要把它放在一條線上。將兩個版本與您的VCS相鄰進行比較時,會出現短線的優勢。 –
我明白了,謝謝! – Wretch11
我很欣賞這個反饋,但是爲什麼比a更有用:「不,你不能」。你能否詳細說明爲什麼不應該或不能做到? 謝謝你 – Wretch11
正如你在你的問題中所說的,「我想填充兩個__separate__列表,[...]」(emph mine),所以把它分成兩個語句(即兩行)更加清楚。把它放在一條線上是沒有好處的。 –