def compress(vit,bit):
s = ''
x = iter(vit)
y = iter(bit)
z = list(vit)
try:
while True:
v1 = next(x)
v2 = next(y)
if z.index(v1) == v2:
s += str(v1)
except StopIteration:
pass
return s
压缩生成器将两个iterables作为参数:它从第一个iterable中生成每个值,该值在第二个iterable中具有等效位置,表示Python将认为是True值。例如,
for i in compress('abcdefghijklmnopqrstuvwxyz', (is_prime(i) for i in irange(1,26))):
print(i,end='')
它返回' bcegkmqsw'
需要时
('abcdefghijklmnopqrstuvwxyz',[is_prime(i) for i in irange(1,26)])])
它应该打印'bcegkmqsw'
,但我的功能会打印'ab'
谁能告诉我如何解决它?
这是我得到的错误:
17 *Error: ''.join([str(v) for v in compress('abcdefghijklmnopqrstuvwxyz',[is_prime(i) for i in irange(1,26)])]) -> ab but should -> bcegkmqsw
18 *Error: ''.join([str(v) for v in compress('abcdefghijklmnopqrstuvwxyz',(is_prime(i) for i in irange(1,26)))]) -> ab but should -> bcegkmqsw
答案 0 :(得分:0)
我们假设
s='abcdefghijklmnopqrstuvwxyz'
a=[is_prime(x) for x in xrange(1,26)]
s
的长度为26; xrange(1,26)
的长度为25。
您应该通过xrange(1,27)
我认为你的目的是在主要位置收集角色
假设is_prime(x)
返回bool以便a=[False, True, True, ...]
,您可以按以下方式更改代码:
try:
while True:
v1 = next(x)
v2 = next(y)
if v2:
s += str(v1)
except StopIteration:
pass