对于循环,在列表中创建最多三项的列表

2024-06-06 03:31:32 发布

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

问题:

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

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

如果代码也能处理不能除以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']]

Tags: 字符串in元素列表formylist计数
2条回答

它被称为“收益块”,我在被告知该术语后发现了一条线索。

List to Stackoverflow solutions to chunck a list

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)))

使用itertools的第二个解决方案:

#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)))

我认为这就是您要寻找的(如果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)

相关问题 更多 >