Python 通过在列表中插入列表来扩展列表
我想扩大名单Python 通过在列表中插入列表来扩展列表,python,Python,我想扩大名单 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,(0,(0,1‘)’))” 但我真正想要的是(0,0,0,0,0,0,0,1)。 你有什么想法吗?你可以这样做:s=(0,)+s创建一个新的元组,前导0(而不是像你这样在每次迭代时嵌套元组) 但也许最好的方法是使用乘法(以避免循环)在零元组
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,(0,(0,1‘)’))”
但我真正想要的是(0,0,0,0,0,0,0,1)。
你有什么想法吗?你可以这样做:s=(0,)+s
创建一个新的元组,前导0
(而不是像你这样在每次迭代时嵌套元组)
但也许最好的方法是使用乘法(以避免循环)在零元组前面加上前缀:
更让我困扰的是需要使用全局
。我会将s
作为参数传递:
def hi(x,s):
return (0,)*x + s
print(hi(5,(0,1)))
产生以下元组
:
(0, 0, 0, 0, 0, 0, 1)
您可能想了解list
s和tuple
s及其差异:。使用列表更容易,因为它们提供了可用的就地操作(但它们不能用作字典键或存储在set
s中)s=0,1
不是一个列表
,而是一个不可变的元组
最好使用适当的lists=[0,1]
然后使用方法
def高(x,s):
对于范围(x)内的uu:
s、 插入(0,0)
返回s
或更好地避免for循环的事件:
def高(x,s):
返回([0]*x)+s
如果你想使用a,那么@Jean-François Fabre的答案就是最好的选择。考虑到你的特定用例,Jean的答案会更好。但是如果你想将嵌套的元组变成一个一维元组,更规范的操作叫做flatte()
flatte()
获取任意嵌套的序列,并将其“展平”为无嵌套的序列。flatten()
未包含在python标准库中,但在许多其他语言中,它是一个非常有用的操作。我从下面的实现中获取了此操作,其中包括其他实现,并讨论了它们的优缺点
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)
尝试:s=(0,)+s
但这不是一个列表,而是一个tuple
,在tuple中“插入”是非常低效的。您提到了列表,但这些不是列表,它们是tuple
s(不可变与可变))
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)