【问题标题】:Type of Python data type list is either list or tuple depending on usage but whyPython 数据类型列表的类型是列表或元组,具体取决于使用情况,但为什么
【发布时间】:2018-07-23 13:32:17
【问题描述】:
>>> lst = [[-2, -1], [0, 1, 2]]
>>> lst
   [[-2, -1], [0, 1, 2]]
>>> print (*lst)
[-2, -1] [0, 1, 2]

>>> print (type(lst))
<class 'list'>

所以lst 的类型在这里是list

在函数调用的上下文中 - 我不确定为什么它仍然不是列表。语句 print (type(lst)) prints: &lt;class 'tuple'&gt;. 在函数内,为什么 lst 不是 list

def mymap(func, *lst):
    res = []
    print (func)    
    print (*lst)
    print (type(lst))
    print (list(zip(*lst)))
    for args in list((zip(*lst))):           
        res.append(func(*args))
        #return (res) 
    return (res)
ts = mymap(pow, [-2, -1], [0, 1, 2])

print (ts)

【问题讨论】:

  • 您为什么希望lst 成为一个列表?
  • *args 语法将参数放在一个元组中。这些参数本身就是列表并不重要。
  • @hop - 我不希望 lst 成为一个列表 - 但结果在从命令行打印 *lst*lst 作为函数中的第二个参数之间不一致mymap。后一种情况似乎强制进行类型转换....
  • 再说一次,为什么你的函数中的lst应该包含除了一个元组之外的任何东西?
  • 不一致。您正在将列表解包print 函数中。在您的函数定义中,您使用的是变量参数语法,它将始终使用元组来聚合参数。 在任何地方都没有进行类型转换

标签: python-3.x list tuples iterable-unpacking


【解决方案1】:

在您的第一个示例中,您是 unpacking a sequence into several parameters,然后被赋予函数(在本例中为 print)。

>>> numbers = [1, 2, 3]
>>> print(*numbers)
1 2 3

完全一样

>>> print(numbers[0], numbers[1], numbers[2])
1 2 3

在您的第二个示例中,您使用的是 arbitrary parameter list,其中几个参数被打包到一个元组中。

两种不同的事物,两种不同的结果。没有不一致的地方。

【讨论】:

    猜你喜欢
    • 2014-09-29
    • 2018-08-07
    • 1970-01-01
    • 1970-01-01
    • 2021-07-06
    • 1970-01-01
    • 2021-07-12
    • 1970-01-01
    相关资源
    最近更新 更多