【问题标题】:Assign multiple values of a list分配列表的多个值
【发布时间】:2015-07-15 09:09:33
【问题描述】:

我很想知道是否有一种“pythonic”方式将列表中的值分配给元素?为了更清楚,我要求这样的东西:

myList = [3, 5, 7, 2]

a, b, c, d = something(myList)

这样:

a = 3
b = 5
c = 7
d = 2

我正在寻找比手动执行此操作更好的其他选择:

a = myList[0]
b = myList[1]
c = myList[2]
d = myList[3]

【问题讨论】:

  • 'assing' != 'assign',虽然这是一个非常有趣的错字

标签: python list


【解决方案1】:

只需输入:

>>> a,b,c,d = [1,2,3,4]
>>> a
1
>>> b
2
>>> c
3
>>> d
4

当您将iterable 分配给上述多个变量时,Python 会使用assignment unpacking

Python3.x 中,这已被扩展,因为您还可以使用星号运算符解压缩到小于iterable 长度的多个变量:

>>> a,b,*c = [1,2,3,4]
>>> a
1
>>> b
2
>>> c
[3, 4]

【讨论】:

    【解决方案2】:

    a, b, c, d = myList 就是你想要的。

    基本上,该函数返回一个元组,它类似于一个列表——因为它是一个可迭代对象。

    顺便说一句,这适用于所有可迭代对象。而且在使用的时候需要知道iterable的长度。

    【讨论】:

    • 如果 myList 中没有确切的项目,这将失败并显示 ValueError
    【解决方案3】:

    完全同意NDevox的回答

    a,b,c,d = [1,2,3,4]
    

    我认为还值得一提的是,如果您只需要列表的一部分,例如列表中的第二个和最后一个元素,您可以这样做

    _, a, _, b = [1,2,3,4]
    

    【讨论】:

      【解决方案4】:

      一个技巧是在 Python 3.8 中使用 walrus 运算符,这样您仍然拥有 my_list 变量。并使其成为单行操作。

      >>> my_list = [a:=3, b:=5, c:=7, d:=2]
      >>> a
      3
      >>> b
      5
      >>> c
      7
      >>> d
      2
      >>> my_list
      [3, 5, 7, 2]
      

      PS:使用 camelCase (myList) 也不是 Python 的。

      Python 3.8 的新特性:https://docs.python.org/3/whatsnew/3.8.html

      【讨论】:

        【解决方案5】:

        您也可以使用字典。如果列表中有更多元素,则不必浪费时间对其进行硬编码。

        import string
        arr = [1,2,3,4,5,6,7,8,9,10]
        var = {let:num for num,let in zip(arr,string.ascii_lowercase)}
        

        现在我们可以像这样访问字典中的变量了。

        var['a']
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-12-26
          • 1970-01-01
          • 1970-01-01
          • 2021-06-22
          相关资源
          最近更新 更多