Python while和for循环可以提高代码的效率吗?

2024-04-24 22:54:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我编写了以下代码:

initial_list = [item1, item2, item3, item4, ...]
lists = [[list1], [list2], [list3], [list4], ..., [list(n-1)], [list(n)]]
# The number of elements in the both lists might chance

while len(initial_list) > 0:
    for list in lists:
        if len(initial_list) == 0:
            break
        item = initial_list.pop(0)
        list.append(item)

我想知道是否有更好/更简单/更简短的方法来编写上面的代码?如果是,请不要使用困难的函数(等),因为我还是一个初学者,不会理解它。你知道吗


Tags: 代码inlenitemlistslistinitialitem1
2条回答

我相信您正在尝试将initial_list中的项附加到lists中的嵌套列表值,直到使用了所有值initial_list,如果要附加的嵌套列表少于初始值,则从一开始就循环使用lists。你知道吗

使用^{}将嵌套列表与initial_list项配对:

from itertools import cycle

for nested, value in zip(cycle(lists), initial_list):
    nested.append(value)

这里的^{} function确保使用来自initial_list的所有值;zip()最短列表处停止,该列表在这里始终是initial_lists。你知道吗

演示一个包含10个值的初始列表(整数09)和一个包含4个空子列表的嵌套列表:

>>> from itertools import cycle
>>> initial_list = range(10)
>>> lists = [[] for _ in range(4)]
>>> for nested, value in zip(cycle(lists), initial_list):
...     nested.append(value)
... 
>>> lists
[[0, 4, 8], [1, 5, 9], [2, 6], [3, 7]]

不使用循环将需要保留一个计数器并附加到lists[count % len(lists)]。计数器可以通过enumerate()函数生成:

for i, value in enumerate(initial_list):
    lists[i % len(lists)].append(value)

您可以使用:

if container:

…而不是:

if len(container) > 0:

另外,list.pop(0)速度很慢。也许你在找一个http://docs.python.org/3/library/collections.html#collections.deque?它可以让你迅速地从两端取出东西,但你将无法方便地访问(如)中间了。你知道吗

相关问题 更多 >