繁体   English   中英

搜索列表最简单的方法是什么?

[英]What would be the easiest way to search through a list?

它实际上是一个字符串,但我只是将其转换为列表,因为应该将答案作为列表返回。 我一直在研究这个问题已有几个小时,无法解决。 我应该使用一个字符串,例如“ Mary的小羊羔”和另一个字符串,例如“ ab”,然后搜索string1,看看是否有来自string2的字母出现。 因此,如果两个示例正确完成,它将返回[“ a = 4”,“ b = 1”]

到目前为止,我有:

def problem3(myString, charString):
    myList = list(myString)
    charList = list(charString)
    count = 0
    newList = []
    newString = ""
    for i in range(0,len(myList)):
        for j in range(0,len(charList)):
            if charList[j] == myList[i]:
                count = count + 1
                newString = charList[j] + "=" + str(count)
    newList.append(newString)
    return newList

哪个返回[a = 5]我知道它与newList.append(string)有关,应该放置在什么地方,任何人都有建议吗?

您可以使用列表推导和字符串(和列表!)具有的count函数轻松地完成此操作:

  1. 将搜索字符串拆分为字符列表。
  2. 对于搜索字符串中的每个字符,请遍历输入字符串并确定它发生了多少(通过count )。

例:

string = 'Mary had a little lamb'
search_string = 'ab'
search_string_chars = [char for char in search_string]
result = []
for char in search_string_chars:
    result.append('%s=%d' % (char, string.count(char)))

结果:

['a=4', 'b=1']

请注意,您不需要将search_string ('ab')分成字符列表,因为字符串已经是字符列表-上面的操作就是通过这种方式来说明这一概念的。 因此,上面的简化版本可能是(也产生相同的结果):

string = 'Mary had a little lamb'
search_string = 'ab'
result = []
for char in search_string:
    result.append('%s=%d' % (char, string.count(char)))

这是编码器提到的使用Counter的可能解决方案,

from collections import Counter
s = "Mary had a little lambzzz"

cntr = Counter(s)
test_str = "abxyzzz"

results = []
for letter in test_str:
    if letter in s:
        occurrances = letter + "=" + str(cntr.get(letter))
    else:
        occurrances = letter + "=" + "0"

    if occurrances not in results:
        results.append(occurrances)


print(results)

输出

['a=4', 'b=1', 'x=0', 'y=1', 'z=3']
import collections

def count_chars(s, chars):
    counter = collections.Counter(s)
    return ['{}={}'.format(char, counter[char]) for char in set(chars)]

就这样。 Counter完成实际计算字符串中字符的工作。 然后使用chars中的chars创建格式字符串的列表理解。 chars应该是一个集合,而不是一个列表,这样,如果chars有重复的chars ,则输出将仅显示一个。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM