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(",")
有任何想法吗?
您可以尝试使用列表理解和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)