Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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_List_Int_Tuples - Fatal编程技术网

Python 将包含整数的元组解包到列表

Python 将包含整数的元组解包到列表,python,list,int,tuples,Python,List,Int,Tuples,我试图创建一个包含整数的元组的列表 输入示例: test1((1, 2, 3), 2, 3) test2((5, -5), 10, 3) test3((10.2, -2.2, 0, 1.1, 0.5), 12.4, 3) 我尝试过以各种方式迭代元组,但得到了一个“int()不是iterable错误”。 我试图将变量分配给输入,但得到了一个“'type'对象不可下标”错误 我现在已经重写了很多次脚本,没有保存以前的尝试。我在这里找到的解包方法不起作用,因为它们需要我迭代输入,而我不能这样做(

我试图创建一个包含整数的元组的列表

输入示例:

test1((1, 2, 3), 2, 3)

test2((5, -5), 10, 3)

test3((10.2, -2.2, 0, 1.1, 0.5), 12.4, 3)
我尝试过以各种方式迭代元组,但得到了一个“int()不是iterable错误”。 我试图将变量分配给输入,但得到了一个“'type'对象不可下标”错误

我现在已经重写了很多次脚本,没有保存以前的尝试。我在这里找到的解包方法不起作用,因为它们需要我迭代输入,而我不能这样做(或者弄清楚如何做)<代码>b=[i代表sub中的子参数,i代表sub中的子参数],
列表(链。从参数(args)
ect未工作

这是我现在拥有的

def checkio(*args):
    ab, cd, ef = args
    print (ab)
    empty = []
    empty.append(cd)
    empty.append(ef)
    for i in ab:
        empty.append(i)
    print (empty)

有点乱。我对python很陌生,所以我确信如果模式始终是tuple(可以是2种模式之一),那么解决方案非常简单:

  • 元组
您可以执行以下更通用的解决方案:

my_tuple = ((10.2, -2.2, 0, 1.1, 0.5), 12.4, 3)
my_list = []
for v in my_tuple:
    if isinstance(v, tuple):
        my_list.extend += v
    else:
        my_list.append(v)

print my_list
输出:

[10.2, -2.2, 0, 1.1, 0.5, 12.4, 3]

这是一个模式和数据结构的问题。

如果您的输入与示例一样规则,答案很简单;通过连接以下内容创建一个新元组:

def checkio(ab, cd, ef):
    return ab + (cd, ef)
这会将带有
(cd,ef)
的新元组连接到现有的
ab
元组

对于不同的模式,您需要测试值;如果您得到的只是元组或整数,并且元组不是嵌套的,那么这很简单:

def checkio(*args):
    result = []
    for value in args:
        if isinstante(value, tuple):
            result += value
        else:
            result.append(value)
    return tuple(result)
您可以使用递归来对抗递归;如果元组可以包含其他元组,请使用递归函数将其展平:

def checkio(*args):
    result = []
    for value in args:
        if isinstante(value, tuple):
            result += checkio(*value)
        else:
            result.append(value)
    return tuple(result)
你试过这个吗:

a = (1,2,3)
b = [*a]
print(b)
它将元组转换为列表。
或者干脆
print(*a)

所有输入都是正则的;一个元组和两个整数。这种模式总是存在吗?@Ashwini如果输入是正则的,就像Martijn刚才问的那样,那么这不是一个duplicate@MartijnPieters让我们说是的。我正在Chekio上执行一项任务,这就是他们用来测试我脚本的所有输入,但我不确定他们是否会抛出cur“把球扔给我。”@NickKremer:在这种情况下,只需接受3个参数,并使用
ab+(cd,ef)
创建一个新的元组。看起来第一个参数不是一个只有更多数字的元组。@jamylak我浏览了整个网站,没有找到任何解决我问题的方法。如果我忽略了一篇文章,链接将非常有用。不要使用列表理解副作用;你正在创建一个返回值为
my_list.append()
的list对象,然后再次丢弃该列表。这是一种浪费!只需使用
my_list.extend(v)
my_list+=v
就可以了;它们会为您迭代。@Martijn Pieters您创建的
列表是对的,不使用它是一种浪费,我用extend修复了它。