【问题标题】:Python loop same result for list of lists and comma separated listsPython循环列表列表和逗号分隔列表的相同结果
【发布时间】:2017-07-05 12:49:22
【问题描述】:

我最近在 python 中偶然遇到了这种行为。有人可以解释为什么循环遍历 list of lists 以及逗号分隔的列表会产生相同的结果。

# comma separated lists
values = ['cat','fish'], ['cat','fish','monkey'], ['cat','fish','monkey','fish']
for v in values:
    print(v)

# List of lists
values = [['cat','fish'], ['cat','fish','monkey'], ['cat','fish','monkey','fish']]
for v in values:
    print(v)

【问题讨论】:

  • 因为值在第一种情况下被假定为tuple,并且您可以像遍历列表列表一样遍历列表元组。只要print(type(values)),你就会看到。
  • print(values) 在每种情况下 - 你会看到第一个创建一个元组。

标签: python list loops


【解决方案1】:

逗号分隔的列表实际上是一个元组:

>>> values = ['cat','fish'], ['cat','fish','monkey'], ['cat','fish','monkey','fish']
>>> values
(['cat', 'fish'], ['cat', 'fish', 'monkey'], ['cat', 'fish', 'monkey', 'fish'])
>>> type(values)
<type 'tuple'>

由于元组是可迭代的,所以你会得到相同的结果。

【讨论】:

    【解决方案2】:

    如果您用逗号分隔值,Python 会将其解释为元组。所以你的第一句话相当于:

    values = (['cat','fish'], ['cat','fish','monkey'], ['cat','fish','monkey','fish'])
    

    像列表一样,元组可以迭代其元素(同样是 ['cat','fish'] 等)

    所以对于for 循环中的v,没有任何变化。

    唯一的区别是元组是不可变的,所以你不能向第一个values添加/删除元素,也不能设置 em> values 的元素(但是您可以对各个列表执行调用)。

    【讨论】:

    • 谢谢威廉·范昂塞姆!
    【解决方案3】:

    基本上,当用逗号分隔列表时,您正在构建一个元组,它可以被迭代:

    values = ['cat','fish'], ['cat','fish','monkey'], ['cat','fish','monkey','fish']
    values
    (['cat','fish'], ['cat','fish','monkey'], ['cat','fish','monkey','fish'])
    

    【讨论】:

      【解决方案4】:

      第一个被视为元组,第二个是列表。两者都可以通过 for 循环进行迭代。

          # comma separated lists
          values = ['cat','fish'], ['cat','fish','monkey'],['cat','fish','monkey','fish']
          print(type(values))
          # Output will be <type 'tuple'>
      
          # List of lists
          values = [['cat','fish'], ['cat','fish','monkey'], `enter code here`['cat','fish','monkey','fish']]
           print(type(values))
          # Output will be <type 'list'>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-14
        • 1970-01-01
        • 1970-01-01
        • 2012-03-11
        • 1970-01-01
        • 2023-03-26
        • 1970-01-01
        相关资源
        最近更新 更多