亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何檢查列表中字符串內的 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條經驗 獲得超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)


查看完整回答
反對 回復 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 關注
  • 204 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號