过滤包含特定字符串的列表
Filter a list containing specific string
我的目标
我有一组特定的长列表,其中包含许多具有不同结尾的资产对:BTCUSDT
ETHBTC
ANKRETH
...从这个列表中,我想过滤掉以 USDT 结尾的交易品种。
我的问题:
我已经尝试使用 filter
和 all
进行迭代,但是 none 提供了准确的结果。
这是我的尝试:
尝试 1:
my_set = ['LUNAUSDT', 'ETHBTC', 'ETHBNB', 'BTCUSDT', 'MANATUSD', 'ALICEETH' ]
my_set = [word for word in symbols if 'USDT' in my_set]
my_set
This results in an empty 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: argument of type 'bool' is not iterable
尝试 3:
my_final_set = filter(lambda x:x.endswith(("USDT")), my_set)
my_final_set
This shows: <filter at 0x7fe537eebf10>
我基本上想要我的最终列表,其中所有符号都以 USDT
结尾
例如:
my_set = ['LUNAUSDT', 'ETHBTC', 'ETHBNB', 'BTCUSDT', 'MANATUSD', 'ALICEETH' ]
结果:['LUNAUSDT', 'BTCUSDT']
对于我做错的任何帮助或建议,我们将不胜感激。提前致谢!
你快到了。试试这个:
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']
解决方案使用 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)]
您可以使用正则表达式:
import re
my_set = ['LUNAUSDT', 'ETHBTC', 'ETHBNB', 'BTCUSDT', 'MANATUSD', 'ALICEETH' ]
my_filtered_set = [ i for i in my_set if re.search('USD$',i) ]
尝试 1
[word for word in symbols if 'USDT' in my_set]
这里有两个错误:
'USDT' in my_set
检查 'USDT'
是否包含在输入列表中,而不是它是否包含在 其中一个单词 中输入列表。你应该使用 'USDT' in word
.
'USDT' in word
将检查 'USDT'
是否包含在 anywhere in word
中(不仅仅是在末尾)。为了检查字符串 是否以 特定后缀结尾,请使用 word.endswith('USDT')
.
尝试 2
[ x for x in my_set in all(keyword in keyword for keyword in my_set)]
这使您的尝试毫无意义。 all(...)
returns True
或 False
,取决于条件是否对可迭代的所有元素都为真。在这种情况下,keyword in keyword
显然对来自 my_set
的所有单词 keyword
为真,因此这等同于
[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
returns 一个 迭代器 ,只有 returns 迭代它的结果。为了得到一个列表,你必须使用迭代器:
list(filter(lambda x: x.endswith(("USDT")), my_set))
约等于
result = []
for y in filter(lambda x: x.endswith(("USDT")), my_set):
result.append(y)
见
我的目标
我有一组特定的长列表,其中包含许多具有不同结尾的资产对:BTCUSDT
ETHBTC
ANKRETH
...从这个列表中,我想过滤掉以 USDT 结尾的交易品种。
我的问题:
我已经尝试使用 filter
和 all
进行迭代,但是 none 提供了准确的结果。
这是我的尝试:
尝试 1:
my_set = ['LUNAUSDT', 'ETHBTC', 'ETHBNB', 'BTCUSDT', 'MANATUSD', 'ALICEETH' ]
my_set = [word for word in symbols if 'USDT' in my_set]
my_set
This results in an empty 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: argument of type 'bool' is not iterable
尝试 3:
my_final_set = filter(lambda x:x.endswith(("USDT")), my_set)
my_final_set
This shows: <filter at 0x7fe537eebf10>
我基本上想要我的最终列表,其中所有符号都以 USDT
例如:
my_set = ['LUNAUSDT', 'ETHBTC', 'ETHBNB', 'BTCUSDT', 'MANATUSD', 'ALICEETH' ]
结果:['LUNAUSDT', 'BTCUSDT']
对于我做错的任何帮助或建议,我们将不胜感激。提前致谢!
你快到了。试试这个:
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']
解决方案使用 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)]
您可以使用正则表达式:
import re
my_set = ['LUNAUSDT', 'ETHBTC', 'ETHBNB', 'BTCUSDT', 'MANATUSD', 'ALICEETH' ]
my_filtered_set = [ i for i in my_set if re.search('USD$',i) ]
尝试 1
[word for word in symbols if 'USDT' in my_set]
这里有两个错误:
'USDT' in my_set
检查'USDT'
是否包含在输入列表中,而不是它是否包含在 其中一个单词 中输入列表。你应该使用'USDT' in word
.'USDT' in word
将检查'USDT'
是否包含在 anywhere inword
中(不仅仅是在末尾)。为了检查字符串 是否以 特定后缀结尾,请使用word.endswith('USDT')
.
尝试 2
[ x for x in my_set in all(keyword in keyword for keyword in my_set)]
这使您的尝试毫无意义。 all(...)
returns True
或 False
,取决于条件是否对可迭代的所有元素都为真。在这种情况下,keyword in keyword
显然对来自 my_set
的所有单词 keyword
为真,因此这等同于
[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
returns 一个 迭代器 ,只有 returns 迭代它的结果。为了得到一个列表,你必须使用迭代器:
list(filter(lambda x: x.endswith(("USDT")), my_set))
约等于
result = []
for y in filter(lambda x: x.endswith(("USDT")), my_set):
result.append(y)
见