繁体   English   中英

如何切换任何给定列表的元素?

[英]How to switch elements for any given list?

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

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

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

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

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

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

我一直在考虑使用if语句和.replace()但这会更改56 ,但随后又会改回来。

例子:

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

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

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

另一个例子:

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

Output:

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

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

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

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

>>> 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']

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

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

您可以使用简单的 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']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM