我的压缩功能有什么问题

时间:2016-10-27 07:25:04

标签: python operator-keyword

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

1 个答案:

答案 0 :(得分:0)

我们假设

s='abcdefghijklmnopqrstuvwxyz'
a=[is_prime(x) for x in xrange(1,26)]
  1. s的长度为26; xrange(1,26)的长度为25。 您应该通过xrange(1,27)
  2. 更正它
  3. 我认为你的目的是在主要位置收集角色 假设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