python - 如果元素存在于另一个列表中,则从列表中删除元素时出现问题

标签 python python-3.x csv

我有一个类似这样的列表......

data = [['09/10/2018', '11/10/2018', 'Subject A', 'Teacher Name A', 'Assignment text...'], ['09/10/2018', '10/10/2018', 'Subject B', 'Teacher Name B', 'Assignment text...']]

我想从该列表中删除前三个元素位于 .csv 文件中的每个元素。

CSV 示例:

 09/10/2018, 11/10/2018, Subject A
 09/10/2018, 10/10/2018, Subject B
 24/09/2018, 01/10/2018, Subject E

此 .csv 可能包含与数据列表中的任何列表都不匹配的行。

我的问题是我无法成功从基于 .csv 的数据列表中删除列表

相关代码如下:

data = pull_data() # Gets the list of lists
with open('Log.csv') as f: #Opens Log.csv
    prevData=[tuple(line) for line in csv.reader(f)] #Gets the data from the .csv
for sublist in data:
    for prevSub in prevdata:
        if(len(sublist) > 0 and len(prevSub) > 0):
            if sublist[0] == prevSub[0]:
                if sublist[1] == prevSub[1]:
                    if sublist[2] == prevSub[2]
                        data.pop(data.index(sublist)) # Should remove list from list of lists

最佳答案

这是一种方法。这个想法是从 csv 文件构造一组元组。然后使用列表理解来过滤数据。这确保了 O(1) 查找复杂度。元组转换是必要的,因为 tuple 是可哈希的,而 list 则不是。

from io import StringIO
import csv

data = [['09/10/2018', '11/10/2018', 'Subject A', 'Teacher Name A', 'Assignment text...'],
        ['09/10/2018', '10/10/2018', 'Subject B', 'Teacher Name B', 'Assignment text...']]

x = StringIO(""" 09/10/2018, 11/10/2018, Subject A
 09/10/2018, 10/10/2018, Subject B
 24/09/2018, 01/10/2018, Subject E""")

# replace x with open('Log.csv')
with x as fin:
    set_of_tuples = set(map(tuple, csv.reader(fin, skipinitialspace=True)))

# apply filter
res = [i for i in data if tuple(i[:3]) not in set_of_tuples]

关于python - 如果元素存在于另一个列表中,则从列表中删除元素时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52731336/

相关文章:

python - 如何在 X-Y 平面上绘制标签之间的欧氏距离

python-3.x - 如何通过entry.get()变量从SQL检索数据

Python多线程不是并行执行的

Ruby:如何使用转储方法将数据输出到csv文件?

python - 在 Python 中使用 mdbtools 从 .mdb 文件中提取和排序数据

java - Opencsv:使用@PreAssignmentValidator 时允许更多自定义错误消息

python - 打印没有 unicode 的 python 字典

python - 如何使用 Pyramid(Python 框架)模拟 mod_rewrite 的 url 别名功能?

python - 覆盖类变量和并发 Flask 请求

python - 如何将值和键打印到两列中,并在它们之间留出适当的空间?