我正在尝试输入一个数字列表,并返回原始列表中包含负值的索引列表。我也想使用while循环。到目前为止,这是我的代码。
def scrollList2(myList):
negativeIndices = []
i = 0
while i < len(myList):
if myList[i] < 0:
i = i + 1
negativeIndices.append(i)
return negativeIndices
如何停止循环以及如何让索引返回?现在当我运行它时,它会永远运行(无限循环)一旦它命中myList的最后一个索引,我怎么告诉它停止?
答案 0 :(得分:2)
当您点击第一个非负数时,if
永远不会再次输入,i
永远不会再次增加。将部分放在i
块之外if
增加的位置。
答案 1 :(得分:1)
while i < len(myList):
if myList[i] < 0:
i = i + 1
negativeIndices.append(i)
假设条件myList[i] < 0
不成立。在这种情况下,i
将不会增加,也不会发生任何其他情况。因此,您将在下一次迭代中结束,具有相同的i
值并且具有相同的条件。永远,无休止的循环。
无论您是否匹配,都需要增加i
。因此,您必须将增量置于if
条件之外。此外,您希望在将索引附加到列表后增加i
,因此您实际上附加了您测试的索引,而不是之后的索引:
while i < len(myList):
if myList[i] < 0:
negativeIndices.append(i)
i = i + 1
此外,您通常会在此处使用for
循环。它将自动为您提供i
的所有值,您需要为myList
中的每个元素编制索引。它的工作原理如下:
negativeIndices = []
for i in range(len(myList)):
if myList[i] < 0:
negativeIndices.append(i)
range(len(myList))
将为您提供从零到列表长度的每个数字的值序列(不包括长度本身)。因此,如果您的列表包含4
个值,您将获得0
的值1
,2
,3
和i
。所以你不需要自己动手增加它。
Foo Bar User提到的另一种可能性是enumerate
。该函数将在您的情况下采用序列或列表,并同时为您提供索引和值:
negativeIndices = []
for i, value in enumerate(myList):
if value < 0:
negativeIndices.append(i)
正如您所看到的,这完全消除了通过索引访问列表的需要。
答案 2 :(得分:0)
neg_indices = [k for k,v in enumerate(myList) if v < 0]
这在其他答案中是隐含的,但是对于潜伏者和OP来说可能会有所帮助。虽然肯定会像其他答案所显示的那样完成工作但是它的'免费'列表理解;另外,这里没有无限循环的机会......