我正在尝试编写函数以使用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"
}
答案 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 。就像列表理解一样,但是不会立即在内存中创建整个内容。