我的目標
我有一組特定的長串列,其中包含許多具有不同結尾的資產對:BTCUSDT ETHBTC ANKRETH...從這個串列中,我想過濾掉以 USDT 結尾的符號。
我的問題:
我嘗試過使用filterand allwith 迭代,但是沒有一個提供確切的結果。
這是我的嘗試:
嘗試1:
my_set = ['LUNAUSDT', 'ETHBTC', 'ETHBNB', 'BTCUSDT', 'MANATUSD', 'ALICEETH' ]
my_set = [word for word in symbols if 'USDT' in my_set]
my_set
這導致一個空集。
嘗試2:
keyword = ['USDT']
my_set = ['LUNAUSDT', 'ETHBTC', 'ETHBNB', 'BTCUSDT', 'MANATUSD', 'ALICEETH' ]
final = [ x for x in my_set in all(keyword in keyword for keyword in my_set)]
final
這會導致錯誤:
TypeError:“bool”型別的引數不可迭代
嘗試 3:
my_final_set = filter(lambda x:x.endswith(("USDT")), my_set)
my_final_set
這顯示:<filter at 0x7fe537eebf10>
我基本上想要我的最終串列,所有符號都以USDT
例如:
my_set = ['LUNAUSDT', 'ETHBTC', 'ETHBNB', 'BTCUSDT', 'MANATUSD', 'ALICEETH' ]
結果是:['LUNAUSDT', 'BTCUSDT']
任何關于我做錯了什么的幫助或建議將不勝感激。提前致謝!
uj5u.com熱心網友回復:
您快到了。試試這個:
my_set = ['LUNAUSDT', 'ETHBTC', 'ETHBNB', 'BTCUSDT', 'MANATUSD', 'ALICEETH' ]
final = [word for word in my_set if 'USDT' in word]
print(final)
對于您的嘗試 3,請進行以下更改:
my_final_set = list(filter(lambda x:x.endswith(("USDT")), my_set))
另一種方法是使用.endswith():
final = [word for word in my_set if word.endswith('USDT')]
print(final)
輸出:
['LUNAUSDT', 'BTCUSDT']
uj5u.com熱心網友回復:
使用filter函式的解決方案和list-comprehension
my_set = ['LUNAUSDT', 'ETHBTC', 'ETHBNB', 'BTCUSDT', 'MANATUSD', 'ALICEETH' ]
keyword = 'USDT'
result1 = list(filter(lambda word: word.endswith(keyword), my_set))
result2 = [ word for word in my_set if word.endswith(keyword)]
uj5u.com熱心網友回復:
您可以使用正則運算式:
import re
my_set = ['LUNAUSDT', 'ETHBTC', 'ETHBNB', 'BTCUSDT', 'MANATUSD', 'ALICEETH' ]
my_filtered_set = [ i for i in my_set if re.search('USD$',i) ]
uj5u.com熱心網友回復:
嘗試 1
[word for word in symbols if 'USDT' in my_set]
這有兩個錯誤:
'USDT' in my_set檢查是否'USDT'包含在輸入串列中,而不是檢查它是否包含在輸入串列中的單詞之一中。你應該用過'USDT' in word.'USDT' in word會檢查是否'USDT'包含在任何地方word(不僅僅是在最后)。要檢查字串是否以特定后綴結尾word.endswith('USDT'),請使用.
嘗試 2
[ x for x in my_set in all(keyword in keyword for keyword in my_set)]
這對您的嘗試毫無意義。all(...)回傳True或False,這取決于條件是否對可迭代的所有元素都為真。在這種情況下,對于來自keyword in keyword的所有單詞顯然都是正確的,所以這將等價于keywordmy_set
[x for x in my_set in True]
在這里,Python 會嘗試my_set in True像True某種集合一樣進行評估。它通過嘗試迭代來嘗試這樣做True(然后依次檢查是否有任何專案等于my_set),這是不可能的。
嘗試 3
filter(lambda x:x.endswith(("USDT")), my_set)
這大部分是正確的,但是會filter回傳一個iterator,它只會在您迭代它時回傳結果。為了得到一個串列,你必須使用迭代器:
list(filter(lambda x: x.endswith(("USDT")), my_set))
這大約相當于
result = []
for y in filter(lambda x: x.endswith(("USDT")), my_set):
result.append(y)
請參閱為什么 foo = filter(...) 回傳 <filter object>,而不是串列?
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/479565.html
