【问题标题】:what is wrong with my compress function我的压缩功能有什么问题
【发布时间】:2016-10-27 07:25:03
【问题描述】:
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

compress 生成器将两个迭代器作为参数:它从第一个迭代器中生成每个值,该值在第二个迭代器中具有相同的位置,表示 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

【问题讨论】:

  • 如果您使用有意义的变量名,您将能够自己解决这个问题。
  • 什么是is_prime
  • 判断是否为素数
  • irange 应该是xrange;你能打印两个列表推导的结果吗
  • @jiahuiding 是方法is_prime(i)定义的吗?

标签: python operator-keyword


【解决方案1】:

假设

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-27
    • 1970-01-01
    • 1970-01-01
    • 2018-02-19
    • 2015-05-27
    • 2018-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多