6 回答
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 个循环)
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']
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)
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 或任何特定的编程语言。
TA贡献1784条经验 获得超7个赞
[v for v in variables if str.__ne__(*v.replace(" ", "").split(","))]
您可以使用该str.__ne__(x1, x2)
函数,它等效于x1 != x2
. 将*
列表解压缩为单独的参数,因此输出为两个位置参数(假设字符串中.split(",")
只有一个字符)。,
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]]
但我认为这相当丑陋且难以阅读。
添加回答
举报