【问题标题】:if else one liner in python [closed]如果是python中的一个衬里[关闭]
【发布时间】:2021-05-01 15:19:00
【问题描述】:
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

请帮帮我

【问题讨论】:

  • 不是每个 if/else 语句都可以写成一行;没有理由这样做。
  • @MohammadAliNematollahi 不,还是不行。
  • “我需要写一行”——需要的本质是什么?这是您一直坚持的家庭作业要求,还是只是想要的结果?
  • 我投票结束了这个问题,因为所述问题是“需要”以不同的方式做事,我无法重现该问题。
  • 看起来你可以使用 count 方法来实现你的目标:s.count('1') 会给你 a 和 len(s) - s.count('1) 会给你b

标签: python if-statement one-liner


【解决方案1】:

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

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

如果您只是在寻找更 Python 的解决方案,请放弃循环并使用 Counter

from collections import Counter
counts = Counter(s)
a,b = counts['1'],counts['0']

【讨论】:

  • 是的,这两种方法都有效...感谢 John Coleman。
【解决方案2】:
a=0
s="1110000"
for i in range(len(s)):
  a += 1 if s[i]=='1' else 0

b= len(s) - a   

【讨论】:

  • 是的,这也可以,谢谢
【解决方案3】:

您可以尝试使用 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

【讨论】:

  • 不客气@raveteja
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-07
  • 2019-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多