Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 通过在列表中插入列表来扩展列表_Python - Fatal编程技术网

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
不是一个
列表
,而是一个不可变的
元组

最好使用适当的list
s=[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)