如何检查列表中字符串中的 2 个值是否不同

Tin*_*awa 2 python list-comprehension list

超级简单的问题。假设我在 Python 中有这个列表:

variables = ['A1,A1','A2,B2','A1,C2','B3,B3','C4,C4']
Run Code Online (Sandbox Code Playgroud)

现在,我只需要保留逗号前后值不同的那些项目。在这种情况下,输出将是:

result = ['A2,B2','A1,C2']
Run Code Online (Sandbox Code Playgroud)

我已经有了一个“不那么优雅”的解决方案:

new_list = []
for i in range(len(variables)):
    j = variables[i].split(",")
    if j[0] != j[1].replace(" ", ""):
        z = "{},{}".format(j[0], j[1])
        new_list.append(z)
Run Code Online (Sandbox Code Playgroud)

注意:我必须添加replace以删除空格,但这并不重要......

有没有另一种(更好的)方法来做到这一点?也许正则表达式

注意二:我也尝试使用列表理解:

lista_differents = ["{},{}".format(j[0], j[1]) for i in range(len(variables)) if j[0] != j[1].replace(" ", "")] 
Run Code Online (Sandbox Code Playgroud)

但我还是要弄清楚如何添加该行 j = variables[i].split(",")

有任何想法吗?

Aks*_*gal 5

您可以尝试使用列表理解和set. 您基本上将字符串拆分为 2 个列表,然后查看这 2 个元素的集合是否具有 len > 1,这意味着它们都是唯一的。

variables = ['A1,A1','A2,B2','A1,C2','B3,B3','C4,C4']

[i for i in variables if len(set(i.split(',')))>1]
Run Code Online (Sandbox Code Playgroud)
['A2,B2', 'A1,C2']
Run Code Online (Sandbox Code Playgroud)

如果您对运行时感到困扰,请尝试这种没有split(','). 这比基准测试中最快的要快得多。

[i for i in variables if len(set(i))>3]
Run Code Online (Sandbox Code Playgroud)

编辑:添加基准测试结果(300000 长度输入数组,macbook pro 13)

  • Akshay Sehgal(第一次) - 每个循环 215 ms ± 9.77 ms(平均值 ± 标准差。7 次运行,每次 1 次循环)
  • Akshay Sehgal(秒) - 每个循环 136 ms ± 195 µs(平均值 ± 标准偏差,7 次运行,每次 10 次循环)
  • Aviv Yaniv - 每个循环 468 ms ± 39.4 ms(平均值 ± 标准偏差,7 次运行,每次 1 次循环)
  • jakub - 每个循环 252 ms ± 29.8 ms(平均值 ± 标准差。7 次运行,每次 1 次循环)
  • Md. Ashraful Alam - 每个循环 252 ms ± 29 ms(平均值 ± 标准偏差,7 次运行,每次 1 次循环)