Python之谜:列表的分区:为什么索引超出范围?

2024-09-24 12:34:40 发布

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

编辑时间:

一般问题:使用长度为m*n的某个列表的元素,创建一个包含m个子列表的列表,每个子列表的长度为n

在我的例子中,m>;n和分别是10和3。你知道吗


最后的输出应该是一个列表(“lis1”),包含十个列表(“nulis”的迭代),每个列表有三个元素。另外,我当前的算法应该将“lis0”留空。在最后一步返回错误。你知道吗


我正在解析使用CSV模块生成的一些CSV文件(四列-一列有3个数字的列表,三列各有一个关于各自列表的数字)。我不知道如何更优雅地阅读模块的文档,在最后一步中遇到了一些问题:将列表列中的术语重新组合成3元素长的列表(其他列已经完成)。你知道吗

这个解决方案/解释是理想的,但如果你有,我会采取另一种方法。你知道吗

我记不起其他的一些,但我试过使用“for j in list: while (j == list[list.index(j)+1])(j == list[list.index(j)-1]): newlist.append(j)”,但出现了内存错误。解决这个问题的方法虽然不那么贴切,但很贴切,因为它只适用于我正在研究的一个特例(因为我正在编写的另一个脚本的不足而起作用)。 在当前版本中,我尝试了“break”(提前结束了一个步骤,但有一个相同类型的被忽略的错误)、“continue”和“pass”,但没有效果。你知道吗


将脚本编辑成一个给出相同错误的函数,可以随意给出特殊情况(即,用m=10,n=3解决上述问题的任何方法)

def lispart(lis,length,depth):
    l0 = list(lis)
    l1 = []
    if ((len(l0)%length) != 0) or ((len(l0)%depth) != 0):
        return "Parity Error: length and/or depth do not correspond to list"
    else:
        for i in range(int(len(l0)/depth)):
            for j in range(depth):
                nulis = [l0[j] for j in range(depth)]
                l1.append(nulis)
                for k in nulis:
                    if k in l0:
                        l0.remove(l0[l0.index(k)])
print(lispart([i for i in range(30)], 10, 3))

我认为问题是因为没有足够的元素来完成新的列表。 最终,当您像我写的那样运行它时,最后一个非空的“lis0”打印语句是一个只有一个数字的列表,即原始列表的最后一个元素(仅供参考,它有三十个元素)。上一个“lis1”打印有9个元素,下一个(最后一个“nulis”)元素的格式是正确的,但是我不能判断它是否被追加了,因为在打印其他元素之前会出现一个错误。你知道吗

Traceback (most recent call last):
  File "script.py", line X, in <module>
    nulis = [lis0[j] for j in range(3)]
  File "script.py", line X, in <listcomp>
    nulis = [lis0[j] for j in range(3)]
IndexError: list index out of range

任何帮助都会很棒的,伙计们!你知道吗


Tags: 方法in元素列表forindex错误range
1条回答
网友
1楼 · 发布于 2024-09-24 12:34:40

由stack exchange Mathematics的David C.Ullrich和Peter Foreman设计:

def lispart(lis,depth):
    lish = list(lis)
    assert(len(lish)%depth == 0)
    return [lish[j*depth:(j+1)*depth] for j in range((int(len(lish)/depth)))]

相关问题 更多 >