zip函数和列表推导式

  • 本文关键字:列表 函数 zip python
  • 更新时间 :
  • 英文 :


下面的代码片段从用户获取两个数字。每个数字都由数字0或1组成。程序应该写出一个与给定的数字对相对应的新数字。规则很简单:当且仅当两个给定数的第i位不同时,答案的第i位是1。在另一种情况下,答案的第i位是0。

这是我解决问题的方法,它给了我想要的输出:

s1 = input()
s2 = input()
s = ''

for i in range(len(s1)):
if s1[i] != s2[i]:
s += '1'
else:
s += '0'

print(s)

这一行的方法产生相同的输出,我只是好奇知道它是如何做到的,但不能弄清楚。所以我现在在Stackoverflow上。

i=input;print(''.join('01'[a!=b]for a,b in zip(i(),i())))

步步讲解:

i=input—在i中存储以后调用的函数

zip(i(),i())—如果用户输入10101101,这将返回[(1, 1), (0, 1), (1, 0), (0, 1)]—两个字符串的元素配对

for a,b in-abzip的配对(在示例中,它们首先被设置为a=1和b=1,然后a=0和b=1,等等)

'01'[a!=b]-a!=b将返回一个布尔值——True或False。True= 1和False= 0,因此您可以使用它进行索引。这里写着if a!=b: '1'if a==b: '0'

''.join-最后,将所有的'0'和'1'连接在一起,形成一个字符串并打印

如果你真的想让它成为联机的,去掉分号,像这样做:

print(''.join('01'[a!=b] for a, b in zip(input(), input())))
  1. Python会要求用户输入两个字符串
  2. zip用元组创建一个可迭代对象,所以"hi"one_answers";ho"将变成[(h,h), (i,o)]
  3. 在列表推导式中,你有一个字符串'01',可以用0或1索引
  4. 这就是你的表达式[a!=b]所做的,它计算为True(1)或False(0)
  5. 因为循环遍历所有元组,所以对于输入字符串中的每个字符都会发生这种情况
  6. 最后,''.join将列表中的所有元素连接起来,并打印出来

最新更新