【问题标题】:list comprehension for multiple lists多个列表的列表理解
【发布时间】:2020-11-25 12:33:02
【问题描述】:

是否可以将这样的循环转换为列表理解?

lst_a = []
lst_b = []
lst_c = []
    
test_dict = {'a':1, 'b':2, 'c':3, 'd':4} 

for k, v in test_dict.items():
    lst_a.append(k)
    lst_b.append(k.upper())
    lst_c.append((k+k))

例如,对于这样的事情:

lst_a, lst_b, lst_c = [list comprehension logic here for the above loop]

注意:输出必须是三个单独的列表,就像循环中的列表一样。

【问题讨论】:

    标签: python python-3.x list list-comprehension


    【解决方案1】:

    试试zip():

    test_dict = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
    
    lst_a, lst_b, lst_c = zip(*[(k, k.upper(), k+k) for k in test_dict])
    
    # Convert them to list
    # lst_a, lst_b, lst_c = map(list, zip(*[(k, k.upper(), k+k) for k in test_dict)])) 
    
    # Iterate this dict three times.
    # lst_a, lst_b, lst_c = ([k for k in test_dict], [k.upper() for k in test_dict], [k + k for k in test_dict])
    print(lst_a,lst_b,lst_c)
    

    【讨论】:

      【解决方案2】:

      使用列表推导的最简单方法

      lst_a = []
      lst_b = []
      lst_c = []
          
      test_dict = {'a':1, 'b':2, 'c':3, 'd':4} 
      
      [[lst_a.append(k), lst_b.append(k.upper()), lst_c.append(k+k)] for k in test_dict]
      
      print(lst_a, lst_b, lst_c)
      

      输出 - ['a', 'b', 'c', 'd'] ['A', 'B', 'C', 'D'] ['aa', 'bb', 'cc', 'dd']

      【讨论】:

      • 通常认为使用列表推导来解决其副作用是不好的做法 - 而且效率也很低,因为您还构建了一个 None 列表列表,之后您将立即丢弃。
      猜你喜欢
      • 1970-01-01
      • 2012-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-25
      • 1970-01-01
      • 2023-02-14
      相关资源
      最近更新 更多