【问题标题】:Unpacking a tuple containing integers to a list将包含整数的元组解包到列表中
【发布时间】:2015-03-04 06:43:05
【问题描述】:

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

输入示例:

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() 不可迭代错误”。 我试图将变量分配给输入,但得到“'type' object is not subscriptable”错误。

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

【问题讨论】:

  • 你所有的输入都是有规律的;一个元组和两个整数。那个模式总是存在吗?
  • @Ashwini 如果输入是常规的,就像 Martijn 刚刚问的那样,那么这不是重复的
  • @Martijn Pieters 让我们说是的。我在 Chekio 上执行任务,这是他们用来测试我的脚本的所有输入,但我不确定他们是否会向我扔一个曲线球。
  • @NickKremer:在这种情况下,只需接受 3 个参数,并使用 ab + (cd, ef) 创建一个新元组。看起来第一个参数只不过是一个只有更多数字的元组。
  • @jamylak 我浏览了该网站,但没有找到任何可以解决我问题的东西。如果我忽略了一个帖子,链接将不胜感激

标签: python list int tuples


【解决方案1】:

你试过这个吗:

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

它将元组转换为列表。 或者干脆print(*a)

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 不要对副作用使用列表推导;您正在创建一个返回值为my_list.append() 的列表对象,然后再次丢弃该列表。多么浪费!只需在此处使用my_list.extend(v)my_list += v;这些为您迭代。
    • @Martijn Pieters 你是对的,你创建了一个list 并且不使用它是一种浪费,我已经用扩展修复了它。
    【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 2022-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-02
      • 1970-01-01
      • 2023-01-19
      • 2021-04-18
      相关资源
      最近更新 更多