【问题标题】:Why i need 2 pairs of parenthesis to declare a number list为什么我需要 2 对括号来声明一个数字列表
【发布时间】:2019-04-17 15:06:44
【问题描述】:

也许看起来很笨,但我知道如果我想声明一个列表,我可以这样做:

list1 = list("Hello")

但是为什么我需要两组括号来声明数字:

list2 = list((2,3,4,5))

【问题讨论】:

  • 您正在从元组中创建列表。你可以使用:[2,3,4,5]
  • 因为“Hello”已经是一个字符列表。 2345 是一个整数。
  • 使用方括号需要0个括号:list3 = [1,2,3,4]
  • t= 2,3,4,5; list(t) 虽然有效,但我知道这对某些人来说可能是反直觉的——允许仅基于逗号的元组的语义,但在某些情况下会导致歧义
  • 语义不仅仅允许逗号;逗号是 define 元组的内容。括号只是为了消除逗号的不同用法的歧义。 f(2,3,4) 是一个带有三个参数的函数调用,而f((2,3), 4) 是一个带有一个元组参数和第二个整数参数的调用。 t = 2,3,4,5t = (2,3,4,5) 是等价的,因为没有混淆第一个赋值的 RHS 上的逗号可能意味着什么。

标签: python list iterable


【解决方案1】:

docs state:

list()  Convert an iterable (tuple, string, set, dictionary) to a list.

函数list 只接受一个单个 可迭代参数; list(1,2,3,4) 将是 TypeError。由于字符串在 python 中是可迭代的,因此它是正确的函数调用。为了使用您的整数,您需要将它们转换为某种形式的可迭代。

通过编写list2 = list((2,3,4,5)),您可以将整数转换为可迭代的元组。

【讨论】:

  • 更准确地说,没有额外的(...) OP 将 multiple 参数传递给采用 single 可迭代参数的函数。
  • 您可以将列表声明为[1, 2, 3, 4]list([1, 2, 3, 4]),但这是多余的。
  • 如果你想了解更多关于迭代的信息,你可以阅读这个wiki.python.org/moin/Iterator
  • 要理解的要点是list 不接受可变数量的参数,每个参数都被视为新列表的单独元素。
  • “因为数字是不可迭代的,但字符串是可迭代的”——在这种情况下并不真正相关,但如果他们这样做就会相关list(1)
【解决方案2】:

list() 从 Iterable 构造一个列表。在您的示例中,字符串是可迭代的(人们指出的字符序列),tuple 也是可迭代的(使用圆括号)。

在您的示例中,您将一个元组传递给 list() 函数。

您可以跳过使用内置的list() 函数,直接使用方括号创建一个列表:

mylist = [1,2,3]

【讨论】:

    【解决方案3】:

    在第一种情况下,您在 str 上调用 list() 可以隐式转换为字符序列。如果您仔细观察,对于整数,您正在对整数元组调用 list()。

    不确定您是否正在探索,但最直接的方法是 list2 = [2,3,4,5]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多