在运行时修改列表 start_index python
Modify start_index of list at runtime python
我想知道是否可以在遍历列表时修改列表 start_index 的值。
到目前为止我注意到的是代码
index = 0
l = ['1','2','3']
for elem in l[index:]:
print(elem, index)
在遍历循环时始终打印出值 0。
我试过像这样修改循环内的值:
for elem in l[index:]:
print(elem, index)
index = index+1
并且索引的值被正确打印出来,但我可以再次看到列表中的每个元素。
我试图根据其他一些计算跳过列表的元素(这不仅仅是希望 1 个元素,事实上我不能使用表单
l[start_index:end_index:count]
因为每次迭代计数可能不同,这就是为什么我需要自己设置它。)
有可能实现这样的目标吗?
谢谢
我认为您正在寻找“enumerate”。
例如:
print(list(enumerate(["apples", "and", "oranges"])))
...输出:
[(0, 'apples'), (1, 'and'), (2, 'oranges')]
然后如果你想从 10 开始数,它有一个参数可以让你这样做:
print(list(enumerate(["apples", "and", "oranges"], 10)))
输出:
[(10, 'apples'), (11, 'and'), (12, 'oranges')]
或者,如果您在迭代中跳跃,根据一些计算,您可能需要:
L = [...]
i = 0
while i is not None:
do_something_with(L[i])
i = my_calculation(i)
所以这里的基本思想是——您使用 L 作为数据列表,i 作为数据的索引,然后当 my_calculation returns None (而不是下一个索引,...),您退出循环。
对于某些对象,您可以使用 next()
来跳过元素
f = open("filename.txt")
# skip two lines before loop
next(f)
next(f)
for line in f:
print(line)
# skip one line in loop
next(f)
但是当您在最后一个元素上使用 `next() 并且没有下一个元素时,您可能必须使用 try/except
来捕获错误 StopIteration
try:
# skip two lines before loop
next(f)
next(f)
for line in f:
print(line)
# skip one line in every loop
next(f)
except StopIteration:
pass
对于某些对象,您可以使用 iter()
创建迭代器,然后您可以使用 next()
跳过项目。
index = 0
l = ['1','2','3','4','5']
it = iter(l[index:])
try:
for item in it:
print(item)
# skip two items in every loop
next(it)
next(it)
except StopIteration:
pass
您可以使用 for
循环和 if/else
跳过更多元素
index = 0
l = ['1','2','3','4','5']
it = iter(l[index:])
try:
for item in it:
print(item)
if some_condition:
# skip two items
for _ in range(2):
next(it)
except StopIteration:
pass
但使用while True
或while index < ...
并手动更改index
并使用它来获取值可能更容易。
或者使用 enumerate
和 if index condition: continue
来跳过某些索引的循环。
我想知道是否可以在遍历列表时修改列表 start_index 的值。
到目前为止我注意到的是代码
index = 0
l = ['1','2','3']
for elem in l[index:]:
print(elem, index)
在遍历循环时始终打印出值 0。
我试过像这样修改循环内的值:
for elem in l[index:]:
print(elem, index)
index = index+1
并且索引的值被正确打印出来,但我可以再次看到列表中的每个元素。 我试图根据其他一些计算跳过列表的元素(这不仅仅是希望 1 个元素,事实上我不能使用表单
l[start_index:end_index:count]
因为每次迭代计数可能不同,这就是为什么我需要自己设置它。)
有可能实现这样的目标吗? 谢谢
我认为您正在寻找“enumerate”。
例如:
print(list(enumerate(["apples", "and", "oranges"])))
...输出:
[(0, 'apples'), (1, 'and'), (2, 'oranges')]
然后如果你想从 10 开始数,它有一个参数可以让你这样做:
print(list(enumerate(["apples", "and", "oranges"], 10)))
输出:
[(10, 'apples'), (11, 'and'), (12, 'oranges')]
或者,如果您在迭代中跳跃,根据一些计算,您可能需要:
L = [...]
i = 0
while i is not None:
do_something_with(L[i])
i = my_calculation(i)
所以这里的基本思想是——您使用 L 作为数据列表,i 作为数据的索引,然后当 my_calculation returns None (而不是下一个索引,...),您退出循环。
对于某些对象,您可以使用 next()
来跳过元素
f = open("filename.txt")
# skip two lines before loop
next(f)
next(f)
for line in f:
print(line)
# skip one line in loop
next(f)
但是当您在最后一个元素上使用 `next() 并且没有下一个元素时,您可能必须使用 try/except
来捕获错误 StopIteration
try:
# skip two lines before loop
next(f)
next(f)
for line in f:
print(line)
# skip one line in every loop
next(f)
except StopIteration:
pass
对于某些对象,您可以使用 iter()
创建迭代器,然后您可以使用 next()
跳过项目。
index = 0
l = ['1','2','3','4','5']
it = iter(l[index:])
try:
for item in it:
print(item)
# skip two items in every loop
next(it)
next(it)
except StopIteration:
pass
您可以使用 for
循环和 if/else
跳过更多元素
index = 0
l = ['1','2','3','4','5']
it = iter(l[index:])
try:
for item in it:
print(item)
if some_condition:
# skip two items
for _ in range(2):
next(it)
except StopIteration:
pass
但使用while True
或while index < ...
并手动更改index
并使用它来获取值可能更容易。
或者使用 enumerate
和 if index condition: continue
来跳过某些索引的循环。