繁体   English   中英

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

[英]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() 不是可迭代的错误”。 我试图为输入分配变量,但得到一个“'类型'对象不可下标”错误。

我现在已经多次重写脚本并且没有保存以前的尝试。 我在这里找到的解包方法不起作用,因为它们要求我遍历输入,而我不能这样做(或弄清楚如何)。 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很陌生,所以我确定解决方案非常简单

如果您的输入与您的样本一样有规律,那么答案很简单; 通过连接创建一个新元组:

def checkio(ab, cd, ef):
    return ab + (cd, ef)

这将一个带有(cd, ef)ab组连接到现有的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)

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

这是一个模式问题以及你的数据是如何结构的。

你有没有试过这个:

a = (1,2,3)
b = [*a]
print(b)

它将元组转换为列表。 或者简单地print(*a)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM