当前位置: 首页 > 知识库问答 >
问题:

For loop-在列表中创建最多三项的列表

陶树
2023-03-14

问题:

我想制作一个列表,子列表字符串计数为三。我用矩阵的技术试过了,但到目前为止还不行。

我无法计数,创建列表,第一个元素,第二个元素,第三个元素,创建新列表,插入第四个元素,第五个元素,第六个元素,创建新列表。。。

如果代码也能处理不能除以3的项目列表长度,那就太好了。比如我源代码列表中的8个字符串。

样本数据:

my_list = ['Item11', 'Item12', 'Item13', 'Item24', 'Item25', 'Item26', 'Item37', 'Item38', 'Item39']

我尝试过的:

sublist = []
for mainlist in range(3):
    # Append an empty sublist inside the list
    mainlist.append([])
    for item in my_list:
        for sublist in mainlist:
            sublist.append(item)

print(sublist)

预期结果:

my_list = [['Item11', 'Item12', 'Item13'], ['Item24', 'Item25', 'Item26'], ['Item37', 'Item38', 'Item39']]

共有2个答案

程墨竹
2023-03-14

我想这就是你想要的(如果my_list中的项目数不能被3整除,也可以):

my_list = ['Item11', 'Item12', 'Item13', 'Item24', 'Item25', 'Item26', 'Item37', 'Item38', 'Item39']

mainlist = []
if len(my_list) < 3:
    mainlist.append(my_list)
else:
    # The magic is here
    first_items = my_list[::3]
    second_items = my_list[1::3]
    third_items = my_list[2::3]

    for i in range(len(third_items)):
        temp_list = [first_items[i], second_items[i], third_items[i]]
        mainlist.append(temp_list)

    # This if is for when the number of items are not divisible by 3
    if len(second_items) > len(third_items):
        if len(first_items) > len(second_items):
            mainlist.append([first_items[-1]])
        else:
            mainlist.append([first_items[-1], second_items[-1]])

print(mainlist)
阎功
2023-03-14

它被称为“产量块”,在被告知术语是什么后,我发现了一条线索。

列表到堆栈溢出解决方案

def chunks(lst, n):
    """Yield successive n-sized chunks from lst."""
    for i in range(0, len(lst), n):
        yield lst[i:i + n]


print(list(chunks(my_list, 3)))

迭代工具的第二个解决方案

#from itertools import izip_longest as zip_longest # for Python 2.x
from itertools import zip_longest # for Python 3.x
#from six.moves import zip_longest # for both (uses the six compat library)

def grouper(n, iterable, padvalue=None):
    "grouper(3, 'abcdefg', 'x') --> ('a','b','c'), ('d','e','f'), ('g','x','x')"
    return zip_longest(*[iter(iterable)]*n, fillvalue=padvalue)

print(grouper(3, my_list)))
 类似资料:
  • 对于C#中泛型列表的泛型列表的概念,我似乎有点难以理解。我认为问题源于

  • 我有一个数据框架,我想从其中一列的列表中创建5列 示例: 请注意,这里很少有列表少于5列,对于这些列,请在该位置插入NAN。

  • 我正在尝试创建列表列表,其中大列表表示纸张包含小列表表示问题的集合,问题列表由问题字符串及其ID组成。在这里我的代码: 现在我没有错误地制作问题列表,但是当我尝试创建更大的列表时,Visual Studio无法将可变问题类型识别为类型,哪里错了?

  • 问题内容: 我有看起来像的数据框: 为了进一步处理数据,我需要拆分该列,然后将其替换为如下所示的多列: 因此,这些列可以追加到初始数据帧。我不知道该怎么做,因为像 不能解决我的问题,因为我不仅需要基于列表中位置的列,还需要基于列表中每个唯一值的列。您知道我该如何处理吗? 问题答案: 您可以使用和: 如果需要计数值,则可以使用(我添加一个字符串进行测试):

  • 问题内容: 我是Android开发人员的新手,但仍然可以做很多事情。 我有一个使用以下代码显示的主菜单,但无法确定如何禁用菜单中的选定项目。有人可以帮我一些示例代码吗? 我的strings.xml文件中有一个: 谢谢 问题答案: 为了在创建列表时禁用列表项,您必须从继承。您必须重写以下方法:和。在以前,您返回或取决于列表项在给定位置是否启用。在后者中,您返回。 如果要使用,则还必须实现该方法,因为

  • 问题内容: 所以我想知道如何最好地创建一个空白列表的列表: 由于Python如何处理内存中的列表,因此不起作用: 这确实会创建,但是每个元素都是相同的列表: 类似于列表理解的作品: 但这使用Python VM进行循环。有什么方法可以使用隐式循环(利用C语言编写的代码)吗? 这实际上要慢一些。:( 问题答案: 可能唯一的方法是比 是 它不必每次迭代都创建一个新对象,并且在我的计算机上快15%。 编辑