Python函数wihich获取值列表,并返回该列表在顶层包含多少个字符串

时间:2019-11-03 16:43:51

标签: python python-3.x

我正在尝试编写函数以使用while循环打印出给定列表中有多少个字符串。

我已经使用for循环使它的打印输出6正确了,但是当我尝试使用while循环ı看不到任何打印内容时,没有任何打印输出。

{
             "number" => "2519366789",
         "@timestamp" => 2019-11-03T16:42:11.708Z,
             "thread" => "http-nio-8080-exec-47",
       "appLogicTime" => "1",
             "domain" => "cde",
             "method" => "PUT",
              "level" => "DEBUG",
           "blobSize" => "2862",
           "@version" => "1",
    "immutableBlobId" => "bss_c_586334/Sample_app15-615223-157sadas6648465.txt",
       "streamInTime" => "0",
             "status" => "201",
    "blobStorageTime" => "32",
            "message" => "2519366789 [http-nio-8080-exec-47] DEBUG q.s.b.y.m.PerformanceMetricsFilter - method=PUT status=201 appLogicTime=1, streamInTime=0, blobStorageTime=32, totalTime=33 tenantId=b0csdfsd-1066-4444-adf4-ce7bsdfssdf, immutableBlobId=bss_c_586334/Sample_app15-615223-157sadas6648465.txt, blobSize=2862, domain=cde",
          "totalTime" => "33",
           "tenantId" => "b0csdfsd-1066-4444-adf4-ce7bsdfssdf",
              "class" => "q.s.b.y.m.PerformanceMetricsFilter"
}

2 个答案:

答案 0 :(得分:1)

您将i 两者用作循环变量 和字符串计数。您应该使用其他变量。另外,type(items)始终为list。您应该检查type(items[i])

def count_strings(items):
    i = 0
    count = 0
    while i < len(items):
        if type(items[i]) == str:
            count += 1
        i += 1

    return count

如果不要求while循环,则可以使用列表理解和sum来做到这一点:

sum([1 if type(x) == str else 0 for x in items])

答案 1 :(得分:0)

喜欢单线的人的另一种选择

sum((type(element)==str for element in items))

比较==返回一个布尔值,可以将其视为1并由此求和。 外部括号用于sum()内置函数。 内括号形成 generator comprehension 。就像列表理解一样,但是不会立即在内存中创建整个内容。