【发布时间】:2018-10-03 10:39:46
【问题描述】:
使用 Python3,我需要从任意 i (i
【问题讨论】:
标签: python python-3.x list iteration
使用 Python3,我需要从任意 i (i
【问题讨论】:
标签: python python-3.x list iteration
您可以使用itertools.chain 和itertools.cycle 来获得一个无限迭代,从而产生您想要的序列:
from itertools import chain, cycle
for x in chain(the_list[i:], cycle(the_list)):
print(x)
用作:
>>> from itertools import chain, cycle
>>> the_list = range(10)
>>> i = 6
>>> for x in chain(the_list[i:], cycle(the_list)):
... print(x)
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
[... forever ...]
等效使用cycle+islice:
>>> for x in islice(cycle(the_list), i, None):
... print(x)
>>> for x in islice(cycle(the_list), i, 20):
... print(x)
...
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
[... forever ...]
【讨论】:
i 是什么?
i 指代起始索引
i = 1 开始重复,并且 OP 错误地认为 1 是列表中的第一个索引,因为该声明没有意义。如果 OP 实际上打算做一些不同的事情,他们可以发表评论并澄清这一点。
您通常可以将模运算符 % 很好地用于此类循环场景:
days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
i = 2 # Wednesday
while True:
print(days[i])
i += 1
i = i % len(days) # 7 => 0
Wednesday
Thursday
Friday
Saturday
Sunday
Monday
Tuesday
Wednesday
...
【讨论】:
from itertools import chain, dropwhile, repeat
def endless_daynames(starting_day):
daynames = [
'Monday', 'Tuesday', 'Wednesday', 'Thursday',
'Friday', 'Saturday', 'Sunday']
# get starting day name
starting_day_name = daynames[starting_day]
# creating an endless iterable from an origin list
endless_list = chain.from_iterable(repeat(daynames))
# drop first items before we meet a required one
shifted_list = dropwhile(lambda x: x != starting_day_name, endless_list)
# yield values from it
yield from shifted_list
【讨论】:
endless_list = cycle(daynames)
如果我理解正确,您正在尝试在任何给定的日子里获得工作日 您可以传递工作日名称并以相同的轮换顺序获取列表。 请看看这个:-
from collections import deque
def rotate_week(week_days):
a = deque(["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"])
d = {}
for i in range(len(a)):
d[a[i]] = i
number_to_rotate = d.get(week_days)
a.rotate(-number_to_rotate)
print(list(a))
rotate_week('Wednesday')
输出为:-
['Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday', 'Monday', 'Tuesday']
【讨论】: