为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

婷婷同学_ 2023-06-13 19:20:05
超级简单的问题。假设我在 Python 中有这个列表:variables = ['A1,A1','A2,B2','A1,C2','B3,B3','C4,C4']现在,我只需要保留那些逗号前后的值不同的项目。在这种情况下,输出将是:result = ['A2,B2','A1,C2']我已经有了一个“不太优雅”的解决方案: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)注意:我必须添加replace以删除空格,但这并不重要......还有另一种(更好的)方法可以做到这一点吗?也许正则表达式?注二:我也尝试过使用列表理解:lista_differents = ["{},{}".format(j[0], j[1]) for i in range(len(variables)) if j[0] != j[1].replace(" ", "")] 但我仍然需要弄清楚如何添加这条线j = variables[i].split(",")有任何想法吗?
查看完整描述

6 回答

?
慕丝7291255

TA贡献1859条经验 获得超6个赞

您可以尝试使用列表理解和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]
['A2,B2', 'A1,C2']

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

[i for i in variables if len(set(i))>3]

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

  • Akshay Sehgal(第一) - 每个循环 215 毫秒 ± 9.77 毫秒(7 次运行的平均值 ± 标准偏差,每次 1 个循环)

  • Akshay Sehgal(第二个) - 每个循环 136 毫秒 ± 195 µs(7 次运行的平均值 ± 标准差,每次 10 次循环)

  • Aviv Yaniv - 每个循环 468 毫秒 ± 39.4 毫秒(7 次运行的平均值 ± 标准偏差,每次 1 个循环)

  • jakub - 252 ms ± 29.8 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

  • Md. Ashraful Alam - 每个循环 252 毫秒 ± 29 毫秒(7 次运行的平均值 ± 标准偏差,每次 1 个循环)


查看完整回答
反对 回复 2023-06-13
?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

这是另一种查看唯一字符数的方法。允许的最大值为 3(即字母、数字、逗号)。

l = ['A1,A1','A2,B2','A1,C2','B3,B3','C4,C4'
[i for i in l if len(set(i)) > 3]

输出:

['A2,B2', 'A1,C2']
查看完整回答
反对 回复 2023-06-13
?
ibeautiful

TA贡献1993条经验 获得超5个赞

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


result = [a for a in variables if a.split(',')[0]!=a.split(',')[1].replace(" ", "")]


print(result)


查看完整回答
反对 回复 2023-06-13
?
繁华开满天机

TA贡献1816条经验 获得超4个赞

这只是一个经典问题。一种建议的解决方案是检查字符串的非平凡旋转。我相信这个问题已经在几次求职面试中被使用过。


[x for x in variables if (x+','+x).find(x, 1, -1) == -1]


Out[183]: ['A2,B2', 'A1,C2']

P/s:这个问题更多的是关于逻辑/算法,而不是 pandas 或任何特定的编程语言。


查看完整回答
反对 回复 2023-06-13
?
噜噜哒

TA贡献1784条经验 获得超7个赞

[v for v in variables if str.__ne__(*v.replace(" ", "").split(","))]

您可以使用该str.__ne__(x1, x2)函数,它等效于x1 != x2. 将*列表解压缩为单独的参数,因此输出为两个位置参数(假设字符串中.split(",")只有一个字符)。,


查看完整回答
反对 回复 2023-06-13
?
胡说叔叔

TA贡献1804条经验 获得超8个赞

通过将项目放入集合中并计算元素的数量来检测项目是否不同是 Python 中由来已久的传统。

[a for a in variables 
   if len(set(a.split(','))) > 1]

Python 中的另一个习惯用法是通过迭代仅包含一个元素的列表来在列表推导式中进行“赋值”。所以另一种可能的解决方案是:

[a for a in variables 
   for pair in [a.split(',')] 
   if pair[0] != pair[1]]

Python 3.8 的海象运算符允许您编写:

[a for a in variables 
   if (pair := a.split(','))[0] != pair[1]]

但我认为这相当丑陋且难以阅读。


查看完整回答
反对 回复 2023-06-13
  • 6 回答
  • 0 关注
  • 152 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信