【问题标题】:What is correct syntax for a, b = (1, 2, 3, ...)?a, b = (1, 2, 3, ...) 的正确语法是什么?
【发布时间】:2020-03-29 09:11:16
【问题描述】:

我想做这样的事情:

a, b, = (1, 2, 3, 4, 5, ..., n)
# a = 1
# b = 2

这在 Python 3 中可行吗?

【问题讨论】:

  • 这不是索引的典型用法吗? a = (1, 2, 3, 4, 5, ..., n),然后是 a[0]=1, a[1]=2 等等?
  • 你可以这样做:a, b, *_ = (1, 2, 3, 4, 5, ..., n),额外的值进入 _,a 为 1,b 为 2。

标签: python python-3.x syntax unpack iterable-unpacking


【解决方案1】:

PEP 3132 中所述,从 Python 3 开始,您可以使用第三个变量来收集其余部分:

a, b, *_ = (1, 2, 3, 4, 5)

print(a, b)
# 1 2

print(_)
# [3, 4, 5]

【讨论】:

    【解决方案2】:

    在 Python 3.0 中,* 运算符被添加到多重赋值语法中,允许我们在解包到列表后捕获剩余的项目:

    >>> numbers = (1, 2, 3, 4, 5, 6)
    >>> first, *rest = numbers
    >>> rest
    [2, 3, 4, 5, 6]
    >>> first
    1
    

    【讨论】:

      【解决方案3】:

      解决办法:

      # Input data: seq => tuple 
      seq = (1, 2, 3, 4, 5)
      
      # Store a list of letters between a-z up the same length as the sequence: letter_list => list
      letter_list = list(map(chr, range(ord('a'), ord('z')+1)))[0:len(seq)]
      
      # Iterate through each element in the letter list storing the letter 
      # as variable in the global env: letter_list => var
      for n, val in enumerate(letter_list):
          globals()[val] = seq[n]
      
      # Print variables to console: stdout
      print(a, b, c, d, e)
      

      【讨论】:

      • 为什么downvoted这不能提供所需的解决方案?
      猜你喜欢
      • 2019-08-07
      • 1970-01-01
      • 1970-01-01
      • 2020-02-15
      • 1970-01-01
      • 1970-01-01
      • 2018-08-06
      • 2011-04-28
      相关资源
      最近更新 更多