从嵌套列表中删除初始项

时间:2019-07-07 09:33:03

标签: python

我有一个导入数据的脚本,并将其存储在嵌套列表中。

我有一个列表,该列表指示要丢弃每个子列表中的多少个元素。

我该怎么做?

我知道如何手动执行操作,但是我希望能够将一个csv文件上传到我的程序中,然后运行它。

我已经在csv文件中运行过两次相同的数据行,以尝试使其更易于修复,所以我有

starting_index = [203,203]

但是原则上,它可以包含100个左右不同数量的元素。

然后我有了一系列的嵌套列表。我的starting_index中的元素数量与每个列表中的子列表数量匹配,因此目前每个嵌套列表中只有两个子列表。

我想定义一个函数,可以调用它来削减每个列表。我知道我的代码出了什么问题,但是我不知道如何使其工作。

def index_filter(original_list, new_list):
    for i in starting_index:
            print(i)
            for index, value in enumerate(original_list):
                    for item,element in enumerate(value):
                            if item >= i:
                                    new_list[index].append(element)

我现在意识到这是行不通的,而问题是

for i in starting_index:

因为完成起始索引中的第一个元素后,它将继续进行下一个并追加更多数据。它不会出错,但是不会执行我想要的操作。在这种情况下,我只想从子列表1中删除前203个元素,从子列表2中删除前203个元素,但是原则上这些数字会改变。

我一直尝试使用枚举,也许在这里不合适。

我该如何解决?

谢谢

编辑:一些示例数据:

starting_index = [2,1,3]
list_one = [[15,34,67,89,44], [44,23,67,88,45,67,233,567,41,56.4],[45,6734,5,67,29,55,6345,23,89,45,6,8,3,4,5,876]] 
理想结果:     list_one = [[67,89,44],[23,67,23,67,88,45,67,233,567,41,56.4],[67,29,55,6345,23,89,45,6,8, 3,4,5,876]]

我刚遇到了我正在查看的del语句,我还将查看切片建议。谢谢

编辑:我尝试了该解决方案,但无法使其正常工作。

我尝试过,但是当我放入一些测试数据时,我得到了原始的未更改列表。

如何访问输出?

我的测试脚本:

original_list=[[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15], [16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38]]

starting_index=[3,6]

def index_filter(original_list, starting_index):
    return [value[i:] for i, value in zip(starting_index, original_list)]

index_filter(original_list, starting_index)

print(index_filter)

print(original_list)

输出一条奇怪的消息和原始的未更改列表

<function index_filter at 0x039CC468>
[[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], [16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38]]

谢谢

1 个答案:

答案 0 :(得分:2)

您需要并行遍历starting_indexoriginal_list,因此请使用zip()

您可以使用切片value[i:]来获取列表中从索引开始的部分,而不是循环。

def index_filter(original_list, starting_index):
    return [value[i:] for i, value in zip(starting_index, original_list)]

original_list=[[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15], [16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38]]

starting_index=[3,6]

new_list = index_filter(original_list, starting_index)
print(new_list)