Python 3.x 如何检查子字符串是否可以在两个字符串中找到,但不能在第三个字符串中找到?

Python 3.x 如何检查子字符串是否可以在两个字符串中找到,但不能在第三个字符串中找到?,python-3.x,filtering,Python 3.x,Filtering,我正试图通过我的个人项目来学习编程,但这个问题困扰着我。我希望你能帮忙 这是我正在处理的一些示例数据(变量:market\u list): 我正在尝试检查这个字典列表,以便在其他字符串中找到子字符串的组合(例外情况除外)。因此,例如“ETH-ADA”和“BTC-ADA”,除了USDT-ADA(我想省略的那个) 现在我有这样的事情: my_list = [] for x in market_list: coin = x['MarketName'].split("-")[1] if

我正试图通过我的个人项目来学习编程,但这个问题困扰着我。我希望你能帮忙

这是我正在处理的一些示例数据(变量:market\u list):

我正在尝试检查这个字典列表,以便在其他字符串中找到子字符串的组合(例外情况除外)。因此,例如“ETH-ADA”和“BTC-ADA”,除了USDT-ADA(我想省略的那个)

现在我有这样的事情:

my_list = []
for x in market_list:
    coin = x['MarketName'].split("-")[1]
    if "USDT" not in x['MarketName']:
        if market_list.count(coin) == 2:
            my_list.append(coin)
但在这里,我遇到了新的麻烦,因为USDT对仍然在列表中(并被计算),所以我必须删除它们。这感觉就像是我在粗暴地强迫每一种可能性,我希望有一种更好(而且优雅!)的方式来处理它,我希望有人能向我解释一下

我经常发现自己处于这种情况下,所以请解释您的答案的理由,以便我能够更好地理解“程序员心态”。这是我学习如何编程最困难的部分

编辑:正如有人在评论中所说,解释我的预期输出是非常明智的

我希望上面提到的列表能够输出ETH和BTC相同但不具有USDT的对,因此这将给出:

[ADA,LTC]
输出:

2
如果您想再数数,请使用
计数器()

输出:

Counter({'ADA': 3, 'BTC': 2, 'ETH': 1, 'ETH-ADA': 1, 'USDT': 1, 'USDT-ADA': 1, 'VTC': 1, 'BTC-VTC': 1, 'BTC-ADA': 1})
柜台:

计数器仅对可散列对象起作用,它将分解可散列,因此,如果要在其中填充字符串,请先将它们放入元组:

"abc" -> counted as 1 a , 1 b , 1 c
("abc",) -> counted as 1 "abc"-tuple which it will decompose into the string.

不要使用
set
list
dict
tuple
等变量名。这样会隐藏python类型,以后使用
a,b=x[“MarketName”]。拆分(“-”)
将分割的部分分解为两个变量,检查分割键的两个部分是否为
“USDT”
或硬币或硬币whatever@PatrickArtner你当然是对的。这不是我的实际代码,而是一个可读性更强的示例。我将对其进行编辑,以消除任何混淆。@PatrickArtner[if list.count(coin)==2:]部分是我试图查看列表中是否存在两个子字符串,但它没有如您所看到的那样工作。我建议您查看,特别是在你的问题中包括你希望得到的结果和你目前得到的结果。谢谢你的回答!这解决了一枚硬币的问题,但如何根据ETH/USDT/BTC对测试每枚硬币?如何使这个循环也检查职业训练局的例子?我想就是这样!我事先将没有ETH或BTC的条目从列表中删除,然后用某个硬币计算条目的数量。非常感谢@NoSplitSherlock了解一下
计数器()
及其方法。
from collections import Counter
myCounter = Counter()

for n in data:
    a,b = n["MarketName"].split("-")

    myCounter.update((a,))   # counts the first part
    myCounter.update((b,))   # counts the second part
    myCounter.update((a+"-"+b,))  # counts the complete thing

print(myCounter)  
Counter({'ADA': 3, 'BTC': 2, 'ETH': 1, 'ETH-ADA': 1, 'USDT': 1, 'USDT-ADA': 1, 'VTC': 1, 'BTC-VTC': 1, 'BTC-ADA': 1})
"abc" -> counted as 1 a , 1 b , 1 c
("abc",) -> counted as 1 "abc"-tuple which it will decompose into the string.