【问题标题】:Replacing a value through three list's elements in Python在 Python 中通过三个列表的元素替换一个值
【发布时间】:2021-03-08 02:11:57
【问题描述】:
A = ['d','a','c','a','a','d','a','d','c','e']
B = ['a','d','c','e']
C = ['z','x', 'y','k']

从上面可以看出,我有三个列表。列表 A 是字符的随机混合,而 B 是按频率对 A 列表中的元素进行重新排序,而不重复它们。列表 C 是我要替换的值。我想检查列表 B 中的值是否在 A 中,并将列表 A 中的值更改为列表 C 中的值。如果列表 A 中有值“B[0]”,我想更改所有“B” [0]' 列表 A 中的值更改为 C[0]。其余元素也想这样做。

我想要什么:

A=['x','z','y','z','z','x','z','x','y','k']

【问题讨论】:

    标签: python list element


    【解决方案1】:

    创建一个字典,将要替换的字符映射为替换字符并替换列表推导中的字符:

    A = ['d','a','c','a','a','d','a','d','c','e']
    B = ['a','d','c','e']
    C = ['z','x', 'y','k']
    
    subs = dict(zip(B, C))
    A = [subs[c] for c in A]
    
    >>> A
    ['x', 'z', 'y', 'z', 'z', 'x', 'z', 'x', 'y', 'k']
    

    我们可以假设subs[c] 将始终成功,因为B 派生自A,因此B 中的所有项目也必须存在于A 中。

    如果不是这样,那么您可以改用dict.get()

    A = [subs.get(c, c) for c in A]
    

    【讨论】:

      【解决方案2】:

      您可以制作一个翻译字典 out of B and C 并使用列表理解。

      >>> d = dict(zip(B, C))
      >>> [d[x] for x in A]
      ['x', 'z', 'y', 'z', 'z', 'x', 'z', 'x', 'y', 'k']
      

      如果A 中的某些值可能不在B 中,您可以将d[x] 替换为d.get(x, x)

      如果您需要覆盖A 的值,请使用slice assignment

      A[:] = [d[x] for x in A]
      

      【讨论】:

        【解决方案3】:

        我认为最简单的方法是使用键 B 到值 C 创建一个字典,并使用该字典替换 A 中的值。

        A = ['d','a','c','a','a','d','a','d','c','e']
        B = ['a','d','c','e']
        C = ['z','x', 'y','k']
        
        char_dict = dict(zip(B, C))
        for i, char in enumerate(A):
            A[i] = char_dict[char]
        

        这也可以使用列表理解来完成

        char_dict = dict(zip(B, C))
        A = [char_dict[char] for char in A]
        

        【讨论】:

          猜你喜欢
          • 2019-06-27
          • 2017-07-05
          • 2021-09-26
          • 1970-01-01
          • 2020-10-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-10-20
          相关资源
          最近更新 更多