【发布时间】: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)定义的吗?