如何停止在列表中放置元素

How to stop placing elements in list

我希望您创建一个向列表中添加元素的函数。当涉及到 range() 的边界时,我希望它停止 我明白了:

def get_values(i,n):
  d =[]
  for x in range(n):
      d.append(next(i))
  return d

i = iter(range(10))

print((get_values(i,5)))
print((get_values(i,4)))
print((get_values(i,2)))

It gives me:
[0, 1, 2, 3, 4]
[5, 6, 7, 8]
Traceback (most recent call last):
  File "/Users/user/Documents/untitled1/lol.py", line 17, in <module>
    print((get_values(i,2)))
  File "/Users/user/Documents/untitled1/lol.py", line 4, in get_values
    d.append(next(i))
StopIteration

但我想实现这个:

>>> i = iter(range(10))
>>> get_values(i, 3)
[0, 1, 2]
>>> get_values(i, 5)
[3, 4, 5, 6, 7]
>>> get_values(i, 4)
[8, 9]
>>> get_values(i, 4)
[]

如何控制循环以仅放入 i 的 range() 中的元素?

只听错误,有错误就停止迭代,跳出循环:

def get_values(i,n):
  d =[]
  for x in range(n):
      try:
          d.append(next(i))
      except StopIteration:
          break
  return d

检查是否可以继续的唯一方法是监听 StopIteration 异常。这是我认为可以方便使用的另一个解决方案:

def get_values(i, n):
    d = []
    try:
        for _ in range(n):
            d.append(next(i))
    finally:
        return d

查找 https://www.geeksforgeeks.org/python-next-method/ 以了解有关可以传递给下一个语句的参数的更多信息

def get_values(i,n):
  d =[]
  for x in range(n):
      temp=next(i,'end')
      if temp=="end":
          break
      d.append(temp)
      
  return d
i = iter(range(10))

print((get_values(i,5)))
print((get_values(i,4)))
print((get_values(i,2)))

输出

[0, 1, 2, 3, 4]
[5, 6, 7, 8]
[9]