延伸列表我要擴展的列表通過將列表轉換列表
s = 0,1
def hi(x):
global s
for i in range(x):
s = 0,s
return s
print hi(5)
這樣做的結果將是「(0,(0,(0,(0,(0,(0,1 ))))))'
但我真正想要的是(0,0,0,0,0,1)。 你有什麼想法嗎?
延伸列表我要擴展的列表通過將列表轉換列表
s = 0,1
def hi(x):
global s
for i in range(x):
s = 0,s
return s
print hi(5)
這樣做的結果將是「(0,(0,(0,(0,(0,(0,1 ))))))'
但我真正想要的是(0,0,0,0,0,1)。 你有什麼想法嗎?
你可以這樣做:s= (0,)+s
創建一個新的tuple
與領先0
(而不是在每次迭代嵌套元組就像你做
但是,也許最好的辦法是用零元組前面加上。用乘法(避免環路):
s = (0,)*x + s
讓我困擾更是使用global
需要我會通過s
作爲參數:
def hi(x,s):
return (0,)*x + s
print(hi(5,(0,1)))
導致以下tuple
:
(0, 0, 0, 0, 0, 0, 1)
你可能想閱讀有關list
S和tuple
S和他們的區別:What's the difference between lists and tuples?。這是很容易使用,因爲它們提供的可用就地操作的列表來工作(但它們不能被用來作爲字典鍵或存儲在set
S)
謝謝!問題是固定的:)我應該更多地瞭解元組.. –
鑑於您的特定用例,Jean的答案會更好。但是,如果要將該嵌套元組變爲單維元組,則更規範的操作稱爲flatten()
。 flatten()
需要一個任意嵌套的序列,並將其「平坦化」爲沒有嵌套的序列。 flatten()
未包含在python標準庫中,但它是許多其他語言中包含的令人難以置信的有用操作。我從here開始執行這個實現,其中包括其他實現並討論它們的優缺點。
def flatten(l, ltypes=(list, tuple)):
ltype = type(l)
l = list(l)
i = 0
while i < len(l):
while isinstance(l[i], ltypes):
if not l[i]:
l.pop(i)
i -= 1
break
else:
l[i:i + 1] = l[i]
i += 1
return ltype(l)
的用法很簡單:
a = ((1, 2), (3,), (4, (5, 6)))
flatten(a) # -> (1, 2, 3, 4, 5, 6)
a = hi(6) # -> (0, (0, (0, (0, (0, (0, 1))))))
flatten(a) # -> (0, 0, 0, 0, 0, 0, 1)
嘗試:'S =(0)+ s'但這不是一個名單,但一個'tuple',這真的低效的 「插入」在一個元組中。 –
你提到了列表,但那些不是列表,那些是'tuple's(不可變的,vs可變的)) –