Python简介 - 列出问题

时间:2017-05-20 05:52:49

标签: python

我们已经开始在课堂上做列表了,因为之前的问题/答案在过去帮助了我,所以我来这里有点困惑。

第一个问题是总结列表中的所有负数,我认为我做对了,但只是想仔细检查。

import random

def sumNegative(lst):
    sum = 0
    for e in lst:
        if e < 0:
            sum = sum + e
    return sum

lst = []
for i in range(100):
    lst.append(random.randrange(-1000, 1000))

print(sumNegative(lst))

对于第二个问题,我对如何编写它有点困惑。问题是: 计算列表中出现的单词数量,包括第一次出现的单词“sap”。我假设它是一个随机列表,但没有给出太多信息,所以就这样做了。

我知道结局会很相似但不知道最初的部分会是怎样的,因为它的字符串与数字相对。

我编写了一个类内问题的代码,用于计算列表中有多少奇数(这是随机列表,所以假设它也是随机的那个问题)并获得:< / p>

import random

def countOdd(lst):
    odd = 0
    for e in lst:
        if e % 2 = 0:
            odd = odd + 1
    return odd

lst = []
for i in range(100):
    lst.append(random.randint(0, 1000))

print(countOdd(lst))

我究竟如何更改此符合第二个问题的标准?我只是在这方面感到困惑。谢谢。

3 个答案:

答案 0 :(得分:2)

总结数字的代码看起来很好!我可能会建议您在可以手动检查的列表上进行测试,例如:

print(sumNegative([1, -1, -2]))

同样的逻辑将适用于您的随机列表。

关于countOdd功能的说明,您似乎缺少===检查是否相等,=是否已分配),代码似乎算偶数,不奇怪。代码应该是:

def countOdd(lst):
    odd = 0
    for e in lst:
        if e%2 == 1:       # Odd%2 == 1
            odd = odd + 1
    return odd

至于你的第二个问题,你可以使用一个非常相似的功能:

def countWordsBeforeSap(inputList):
    numWords = 0
    for word in inputList:
        if word.lower() != "sap":      
            numWords = numWords + 1
        else:
            return numWords

inputList = ["trees", "produce", "sap"]
print(countWordsBeforeSap(inputList))

为了解释上述问题,countWordsBeforeSap功能:

  • 开始迭代这些词语。
  • 如果该单词不是"sap",则会递增计数器并继续
  • 如果单词是"sap",那么它会从函数
  • 中提前返回

通过传入您要检查的单词,该功能可能更为通用:

def countWordsBefore(inputList, wordToCheckFor):
    numWords = 0
    for word in inputList:
        if word.lower() != wordToCheckFor:      
            numWords = numWords + 1
        else:
            return numWords

inputList = ["trees", "produce", "sap"]
print(countWordsBeforeSap(inputList, "sap"))

如果您检查的单词来自单个字符串,那么您最初需要将split字符串转换为单个单词,如下所示:

inputString = "Trees produce sap"
inputList   = inputString.split(" ")

将初始字符串拆分为由空格分隔的单词。

希望这有帮助! 汤姆

答案 1 :(得分:0)

def count_words(lst, end="sap"):
    """Note that I added an extra input parameter.
       This input parameter has a default value of "sap" which is the actual question.
       However you can change this input parameter to any other word if you want to by
       just doing "count_words(lst, "another_word".
    """
    words = []
    # First we need to loop through each item in the list.
    for item in lst:
        # We append the item to our "words" list first thing in this loop,
        # as this will make sure we will count up to and INCLUDING.
        words.append(item)

        # Now check if we have reached the 'end' word.
        if item == end:
            # Break out of the loop prematurely, as we have reached the end.
            break
    # Our 'words' list now has all the words up to and including the 'end' variable.
    # 'len' will return how many items there are in the list.
    return len(words)

lst = ["something", "another", "woo", "sap", "this_wont_be_counted"]
print(count_words(lst))

希望这有助于您更好地理解列表!

答案 2 :(得分:0)

您可以有效地使用列表/生成器理解。以下是快速和内存效率。

1。否定总和:

THE_TYPE

2. sap之前的单词数量:与您的样本列表一样,它假设列表中没有数字。

print(sum( i<0 for i in lst))

如果是随机列表。过滤字符串。查找print(lst.index('sap'))

的索引
sap

3. 奇数的计数:

l = ['a','b',1,2,'sap',3,'d']
l = filter(lambda x: type(x)==str, l)
print(l.index('sap'))