【发布时间】:2014-06-17 03:03:15
【问题描述】:
非常感谢任何帮助。我尝试在这里理解 Iterable Object:
这里我必须定义一个函数 in_a_row,它传递一个整数参数(称为 n)和可迭代参数。此函数返回可迭代中连续出现 n 次的那些值的集合: in_a_row(2,[4,4,2,6,6,9,6,7,7,3,2,2]) 返回{2、4、6、7}。如果可迭代对象不包含至少 n 个值,则返回一个空集。如果 n 不小于 2,则引发 AssertionError。
我想出了代码:
def in_a_row(n,iterable):
assert n>=2, 'n has to at least 2'
result = set()
while any(iterable):
copy = iter(iterable)
for i in copy:
print(i)
if i == next(iterable):
result.add(i)
yield result
但是当我用测试用例进行测试时:
print('Testing in_a_row')
print(in_a_row(2,[4,4,2,6,6,9,6,7,7,3,2,2]))
print(in_a_row(3,[5,3,7,7,7,2,3,8,5,4,4,4,6]))
print(in_a_row(4,[5,5,5]))
for i in range(5,1,-1):
print('for',i,'=',in_a_row(i,map(lambda x : x.rstrip(),open('in_a_row.txt'))))
我得到了所有奇怪的结果 Iterable Object: (+_+")?!
Testing in_a_row
<generator object in_a_row at 0x02871AF8>
<generator object in_a_row at 0x02871AF8>
<generator object in_a_row at 0x02871AF8>
for 5 = <generator object in_a_row at 0x028804B8>
for 4 = <generator object in_a_row at 0x028804B8>
for 3 = <generator object in_a_row at 0x028804B8>
for 2 = <generator object in_a_row at 0x028804B8>
假设要重新运行数字的 set()?!
{4,6,7,2}
{7,4}
{}
{'l', 'i'}
{'l', 'i', 'c'}
{'l', 'm', 'i', 'f', 'c', 'x', 'z'}
不能使用任何像“itertools”这样的内置函数python,只能使用while循环+iter+next:(
【问题讨论】:
-
旁白:
while any(iterable)检查是否有任何值是真值;例如,如果iterable == [0,0,0],any(iterable)将为 False,因此不会进入循环。这真的是你想要的吗?
标签: python python-3.x iterator generator