-4
a=0
b=0
s="1110000"
for i in range(len(s)):
   if s[i]=='1':
      a+=1
   else:
      b+=1

如果否则我需要写在一行中。我尝试了以下方式它不起作用。

a+=1 if if s[i]=='1' else b+=1

请帮助我

4

3 回答 3

3

if ... else当用作三元运算符时,是一个不能很好地发挥作用的函数+=1——因为后者会产生副作用。如果你真的想使用三元运算符,你可以使用:

(a,b) = (a+1,b)  if s[i] == '1' else (a,b+1)

如果您只是在寻找更 Pythonic 的解决方案,请删除循环并使用Counter

from collections import Counter
counts = Counter(s)
a,b = counts['1'],counts['0']
于 2021-05-01T15:31:18.423 回答
0
a=0
s="1110000"
for i in range(len(s)):
  a += 1 if s[i]=='1' else 0

b= len(s) - a   
于 2021-05-01T15:25:03.447 回答
0

您可以尝试使用 lambda 函数,然后从列表中解压缩结果

sample= lambda x:  [x.count(i) for i in set(x)]
a,b = sample(s).  #Unpacking the result
print(a,b, end='\t')

输出

3, 4

选项 2

new = lambda x,y: [sum([x + 1 for i in s if i =='1']),sum([y+1 for m in s if m != '1'])]
a,b = new(a,b)
print(a,b, end='\t')

输出

3,4
于 2021-05-01T17:52:56.587 回答