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條經驗 獲得超6個贊
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]]
但我認為這相當丑陋且難以閱讀。
添加回答
舉報