【问题标题】:How to switch elements for any given list?如何切换任何给定列表的元素?
【发布时间】:2020-02-22 19:04:17
【问题描述】:

假设我有一个列表:["5", "6", "4", "3"]

我想要做的是将任何字符 "5" 替换为 "6" 并将 "6" 替换为 "5"。

所以列表最终看起来像这样:

["6", "5", "4", "3"]

我想对所有可能输入的列表执行此操作。这意味着并非所有列表都包含"5" 和"6" 元素,但我想将5 和6 切换为具有这些元素的列表。

注意:列表中的元素是字符串元素。不是整数。

我一直在考虑使用if 语句和.replace(),但这会改变5 和6,但随后又将其改回。

例子:

if "5" in list1:
    list1.replace("5", "6")
if "6" in list1:
    list1.replace("6", "5")

如您所见,这只是将其替换回来。它不起作用。如果有人可以帮助我解决这个问题,那就太好了。

注意:如果列表中的元素为"1532",则其中的5 也应替换为字符串。 6 的反之亦然。

另一个例子:

firstlist = ["125", "673", "222", "65"]`

输出:

firstlist = ["126", "573", "222", "56"]

【问题讨论】:

  • 如果 5 和 6 的数量不相等怎么办?说,[1,5,6,6]?
  • @ggorlen 5 和 6 的数量无关紧要。您应该将这些元素相互替换。
  • 好的,那就是[1,6,5,5]。
  • 是的。没错。

标签: python python-3.x list


【解决方案1】:

假设您的列表中没有下划线和制表符,这可以工作:

>>> list1 = ["126", "573", "222", "56"]
>>> str1 = "\t".join(list1)
>>> str1.replace("5", "_").replace("6", "5").replace("_", "6").split('\t')
['125', '673', '222', '65']

【讨论】:

    【解决方案2】:

    这是一个通用函数,它通过遍历字符串中的字符并键入一个字典来定位每个可交换元素的伙伴来执行交换。这种技术可以扩展到您想要包含的任意数量的任意交换;只需将swaps dict 作为参数而不是x 和y。

    >>> def swap_all(lst, x, y):
    ...     swaps = {x: y, y: x}
    ...     return ["".join(swaps.get(c, c) for c in e) for e in lst]
    ...
    >>> swap_all(["125", "64", "1", "5", "4", "65", "6"], "5", "6")
                 ['126', '54', '1', '6', '4', '56', '5']
    

    【讨论】:

      【解决方案3】:

      我基于@0 0的解决方案:

      t = ['254', '556', '056', '30565']
      [a.replace('5', '-').replace('6', '5').replace('-', '6') for a in t]
      Output:
      ['264', '665', '065', '30656']
      

      【讨论】:

        【解决方案4】:

        您可以像这样使用简单的 for 并替换每个字符:

        firstlist = ["125", "673", "222", "65"]
        
        def switch(a, b, values):
            output = []
            for value_str in values:
                output.append(
                    ''.join(
                        a if b == v else b if a == v else v for v in value_str
                    )
                )
            return output
        
        print(switch('5', '6', firstlist))
        
        >>> ['126', '573', '222', '56']
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-01-30
          • 2023-02-02
          • 2016-07-26
          • 1970-01-01
          • 2018-05-06
          • 2019-05-27
          相关资源
          最近更新 更多