python - 'str' 对象不能解释为整数:Python 错误
问题描述
我正在编写一个函数,它将接收两个字符串列表作为参数。我需要检查第二个列表中每个字符串在第一个列表中出现的次数并返回一个计数数组。我想从第一个数组中弹出找到的元素,以便在接下来的搜索中,我只需要移动较少的元素。但我在strings.pop(i)
.
def matchingStrings(strings, queries):
a=[0 for i in range(len(queries))]
j=0
for i in queries :
while i in strings :
a[j]=a[j]+1
strings.pop(i)
j=j+1
return a
解决方案
您会在文档中找到:
s.pop([i])
- 在i处检索项目并将其从s中删除
所以i
应该是一个索引,你给它一个字符串。您可能会更改为:
strings.pop(strings.index(i))
但这似乎是一种过度杀戮,而且您通过删除元素来提高效率的尝试也因为这条线:
while i in strings:
它可能不是明确的,但这条线每次都会循环列表。即使你让它更短,它也很多。
一种仅遍历列表 1 次的方法是使用Counter
:
from collections import Counter
strings = ["apple", "orange", "banana", "apple", "banana"]
queries = ["apple", "orange", "potato"]
c = Counter(strings)
res = [c[q] for q in queries]
print(res)
给出:
[2, 1, 0]
推荐阅读
- hive - 如何计算impala hive中电子邮件地址中“@”的总出现次数
- microsoft-graph-api - 在守护进程上使用 Microsoft Graph 访问特定邮件帐户
- typescript - 带有严格由字符串联合类型组成的键的打字稿类型
- android - ViewPager 和 ImageGallery
- c# - 如果给定窗口句柄,我如何确定窗口句柄是否是 Windows UI 的一部分而不是应用程序?
- azure-devops - 如何指定哪个版本的 nuget.exe 与 Azure DevOps 中的自托管代理一起使用?
- pyspark - 如何创建具有行号inf pyspark的列
- apache-spark - 如何在火花中实现具有多个条件的try catch
- python - 将多个数据帧传递给函数
- google-apps-script - 在 Google 表格中创建行和根据用户输入填充数据的应用脚本代码中找不到错误