【发布时间】:2018-01-24 23:23:14
【问题描述】:
只是说我有一个 str 和一个 str 列表,我想计算一个 str 中包含的列表中有多少 str。有没有优雅的方法来做到这一点?
例如,
l = {"foo", "bar", "what"}
str = "foobar"
输出将是 2。
我现在这样做的方法是迭代列表并查看 str.contains(str_in_list)
【问题讨论】:
-
你没有列表,那是一组。
只是说我有一个 str 和一个 str 列表,我想计算一个 str 中包含的列表中有多少 str。有没有优雅的方法来做到这一点?
例如,
l = {"foo", "bar", "what"}
str = "foobar"
输出将是 2。
我现在这样做的方法是迭代列表并查看 str.contains(str_in_list)
【问题讨论】:
sum(s in my_string for s in l)
【讨论】:
这是一个简单的例子,
l = ["foo", "bar", "what"]
st = "foobar"
count = 0
for _string in l:
if _string in st:
count += 1
print(count)
【讨论】:
each_string 作为你的迭代器变量名 - 请注意,你的内部条件现在会给人错误的印象 if each_string in st,而它实际上是“if string in st”
使用次数:
l = {"foo", "bar", "what"}
str = "foobar"
c = [item in str for item in l].count(True)
在我看来,这是最易读的版本。 item in str 表示检查item 是否是str 的子字符串。 for item in l 意味着它应该遍历 l 中的每个列表项(顺便说一句,变量名不使用小写 L,因为它在许多字体中看起来几乎与数字 1 相同)。最后.count(True) 返回True 在列表中存在的次数。
【讨论】:
另一种解决方案
count = sum(item in str for item in l)
【讨论】:
sum(item in str for item in l)
True是1的特殊版本。