【问题标题】:Python - Delete elements of several sublists at the same indexPython - 在同一索引处删除多个子列表的元素
【发布时间】:2019-11-09 21:11:01
【问题描述】:

我正在为我正在工作的实验室开发一种用于分析生物数据的算法,但我觉得卡在了一个点上。这个想法是比较来自单个csv 文件的包含相同类型数据的多个体验。

我根据sublist 中元素中的一个值过滤列表列表(这也是长度为3 的列表),我不知道有多少sublists 组成我的主列表它们的长度都不是(数千),但我想删除所有它们中的 ith 元素。 (我有一个索引列表)

一个例子可能更清楚。

这是我的列表列表(已知长度),我的“索引列表”

mainlist=[[[a,1,1,5],[b,2,1,50],[c,3,1,5]],[[alph,1,2,5],[bet,2,2,50],[gam,3,2,5]]] 
indextodelete=[1] (where the 4rth element is > 10)

我尝试得到以下输出

out=[[[a,1,1],[c,3,1]],[[alph,1,2],[gam,3,2]]]

我不太习惯numpy 或pandas。

我尝试使用pop(),或者颠倒我的列表,因为我有很多要删除的元素并且我已经有了我的索引列表。这里,npa 是我的主列表,pval 是用户给定的阈值。

for i,l in enumerate(npa):
    for l,k in reversed(list(enumerate(l))):
        if float(k)>float(pval):
            npa[0:len(npa)][l].pop()

【问题讨论】:

    标签: python list indexing


    【解决方案1】:

    这篇文章不是很清楚,但要通过这个例子从 A -> B 得到,我会运行:

    main_list = [
        [[0, 1, 1, 5], [0, 2, 1, 50], [0, 3, 1, 5]],
        [[0, 1, 2, 5], [0, 2, 2, 50], [0, 3, 2, 5]]
    ]
    index_to_delete = 1
    for sub_list in main_list:
        del sub_list[index_to_delete]
        for smallest_list in sub_list:
            smallest_list.pop()
    print(main_list)
    

    输出与您指定的匹配:

    [[[0, 1, 1], [0, 3, 1]], [[0, 1, 2], [0, 3, 2]]]

    注意:我已将 0 替换为 a、b、c 等,因为未提供这些内容

    这可能不是您想要的,但我认为它至少应该让您走上正轨!

    【讨论】:

    • 谢谢你,事实上我有一个要删除的元素索引列表,但我意识到数据不像我预期的那样,所以必须做一个元组列表('位置'最小的列表)我最后也使用了numpy数组,您可能对下面的代码感兴趣或有一些意见。
    猜你喜欢
    • 2015-06-16
    • 1970-01-01
    • 2022-06-16
    • 1970-01-01
    • 1970-01-01
    • 2023-02-23
    • 1970-01-01
    • 2019-06-11
    • 2021-12-18
    相关资源
    最近更新 更多