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

Unpacking a tuple containing integers to a list

我正在尝试使用包含整数的元组创建单个列表

输入示例:

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() is not iterable error"。 我试图将变量分配给输入,但出现“'type' 对象不可订阅”错误。

我现在已经多次重写脚本并且没有保存以前的尝试。我在这里找到的解包方法不起作用,因为它们需要我遍历输入,而我不能这样做(或弄清楚如何)。 b = [i for sub in args for i in sub]list(chain.from_iterable(args) 等无效。

这是我现在拥有的

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 的新手,所以我确信解决方案非常简单

如果模式总是元组,可以是 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)

你可以用递归来对抗递归;如果元组可以包含 other 个元组,则用递归函数将它们展平:

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)