【问题标题】:Iterate through multiple lists to apply the same changes to each遍历多个列表以对每个列表应用相同的更改
【发布时间】:2021-09-02 17:39:27
【问题描述】:

例如,假设我有 3 个不同的列表:

lst1 = ['a', 'b', 'c']
lst2 = ['d', 'e', 'f', 'g']
lst3 = ['h', 'i']

并且我想对每个列表进行相同的更改,这样我仍然可以单独调用每个列表,但需要进行新的更改。因此,假设我想为上述列表中的每个元素添加一个“z”。例如,我希望能够致电lst3 并获得lst3 = ['hz', 'iz']

我尝试将每个列表分组为列表列表:lists = [lst1, lst2, lst3]

然后使用[[(x + 'z') for x in z] for z in lsts] 应用我的更改。但这只是返回一个列表列表。

我也尝试过使用 for 循环:

for each in lsts:
    each = [(x + 'z') for x in each] 

但是,例如,当我致电 lst3 时,更改似乎并未就地完成。

基本上我希望得到以下输出,以便每个列表仍然与应用的更改分开。对我如何实现这一点有任何见解吗?

lst1 = ['az', 'bz', 'cz']
lst2 = ['dz', 'ez', 'fz', 'gz']
lst3 = ['hz', 'iz']

【问题讨论】:

    标签: python list list-comprehension


    【解决方案1】:

    你在正确的轨道上:

    for each in lists:
        each = [(x + 'z') for x in each] 
    

    这里的问题是each 是您最初正在处理的列表,但之后,each 是新列表。您正在更改变量 each不是原始列表。

    这很容易通过使用切片分配来解决:

    for each in lists:
        each[:] = [(x + 'z') for x in each] 
    

    换句话说,您正在用新列表替换each(仍然是原始列表)的contests,这将为您提供您正在寻找的结果。

    【讨论】:

      【解决方案2】:

      [[(x + "z") for x in z] for z in lists]的结果分配回lst1lst2lst3

      lst1 = ["a", "b", "c"]
      lst2 = ["d", "e", "f", "g"]
      lst3 = ["h", "i"]
      
      lists = [lst1, lst2, lst3]
      
      lst1, lst2, lst3 = [[(x + "z") for x in z] for z in lists]
      
      print(lst1)
      print(lst2)
      print(lst3)
      

      打印:

      ['az', 'bz', 'cz']
      ['dz', 'ez', 'fz', 'gz']
      ['hz', 'iz']
      

      【讨论】:

      • 对于多重赋值,它甚至不必是一个列表,可以是一个生成器。
      猜你喜欢
      • 2014-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-25
      • 2021-11-22
      • 2015-12-07
      • 2012-05-26
      相关资源
      最近更新 更多