2017-09-11 17 views
0

我的相同元組(0,1)分配給定義爲3個輸入值上的限制:複製相同的元組到N

bounds = ((0, 1), (0, 1), (0, 1)) 

是否有分配相同的元組爲N個輸入一個Python化的方法?例如:

bounds = ((0, 1), (0, 1), (0, 1), (0, 1), (0, 1), ...Nth(0, 1)) 
+0

感謝@讓·弗朗索瓦·法布爾和jonrsharpe對你說的話。那個問題「你如何在Python中創建一個重複的元組列表?」我的目的很難理解。我想保持這個問題的重點和具體,因爲它不是重複的。 – artDeco

+1

它是一個重複的,但這裏給出的答案是好的和upvoted,所以使用這裏的(彼得答案是非常好的)。但它是一個重複的(也許我們可以找到更好的人添加到列表) –

+0

謝謝@ Jean-FrançoisFabre感謝您的輸入:) – artDeco

回答

6

您可以乘序列來獲取其內容n淺拷貝:

bounds = ((0, 1),) * n 

這是罰款,只含有穩定的類型整數或其他不可變的數據結構的元組,而是會導致surprising behavior如果您將它用於可變數據結構(如列表),則會得到一個對同一列表的n個引用的序列,因爲它是淺拷貝。在這種情況下,一個理解是創建n個獨立的對象最習慣的方法:

mutable_bounds = [[0, 1] for _ in range(n)] 
+2

確實非常優雅的解決方案@Peter DeGlopper!謝謝 – artDeco

2
bounds = ((0, 1),) * N 

適用於任何可迭代的,BTW:'1111' == '1' * 4

+0

對任何_immutable_ iterable都適用_properly_。對於可變的可迭代對象,它再次重複相同的引用:不是任何人想要的。 –

+0

對於不可改變的東西,我猜想,每次你禁止某人想要什麼東西時,上帝會殺死一個平穩運行的過程。 :( – bipll

+0

它重複了元組的引用,是的,但不能在不更改引用的情況下更改列表中的元組:沒有改變所有元素的風險,嘗試'x = [[]] * 10'然後'x [0] .append(1)'看看我在說什麼(https://stackoverflow.com/questions/240178/list-of-lists-changes-reflected-across-sublists-unexpectedly) –

2

itertools.repeat()替代:

import itertools 

n = 5 # coefficient 
bounds = tuple(itertools.repeat((0,1), n)) 
print(bounds) 

輸出:

((0, 1), (0, 1), (0, 1), (0, 1), (0, 1)) 
2

您可以在元組的列表使用乘法運算符(*)。例如:

((0,1),) * 3 

產量:

((0, 1), (0, 1), (0, 1)) 
+0

感謝@leonardoandrade的意見。 – artDeco

相關問題