如果列表Y上存在列表X元素,则在其位置之前对列表X进行切片

2024-09-27 09:35:54 发布

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

TL;DR:需要对列表A中的数据进行切片,其中元素也存在于列表B中。你知道吗

嗨,我正在尝试比较从HTTP GET请求接收的数据。你知道吗

第一张单子叫做“科目”,我有一张单子,上面列出了我的课程提供的所有科目。第二个列表叫做DETAILS,我有关于每一个主题的细节,包括他们的名字。两个列表的顺序相同。注意:有些科目可以提供多个课程。文章末尾的输入和输出示例。你知道吗

我这里的问题是,我需要精确定位并分离每个主题的数据,以发送到我的数据库。我想比较两个列表并在主题名称出现时保存索引,但我没能得到正确的结果。你知道吗

以下是我迄今为止尝试的代码之一:

def format(details, subject):
    indexes = []
    x = details
    indices = [details.index(x) for x in subject]
    enum = list(enumerate(indexes))
    for i in range(enum[0][1], enum[-1][1]):
        if i in enum[:][1]:
            print("\n\n")
        print(details[enum[i][1]], end=" ")

我希望我说得够清楚。提前谢谢!你知道吗

编辑:

输入数据示例:

SUBJECT = ['EPRI02 - ADMINISTRAÇÃO', 'ECAI06.1 - AUTOMAÇÃO DE SISTEMAS INDUSTRIAIS I', 'ECA022.2 - Automação e Supervisão de Processos II (Prática)']

DETAILS = ['EPRI02 - ADMINISTRAÇÃO', '2018.1', 'IGOR AZEVEDO DOS SANTOS CITTY ROSA (32h)', 'REGULAR', 'Presencial', 'ABERTA', '6T45', 'Anexo 1 - Sala 5', '90/91 alunos', 
'ECAI06.1 - AUTOMAÇÃO DE SISTEMAS INDUSTRIAIS I', '2018.1', 'LUIZ FELIPE PUGLIESE (32h)', 'REGULAR', 'Presencial', 'ABERTA', '6M45', 'Anexo 3 - Sala 11', '13/24 alunos', 
'ECA022.2 - Automação e Supervisão de Processos II (Prática)', '2018.1', 'LUIZ FELIPE PUGLIESE (32h)', 'REGULAR', 'Presencial', 'ABERTA', '5M23', 'Prédio 2 - Sala 2211', '9/12 alunos', '2018.1', 'LUIZ FELIPE PUGLIESE (32h)', 'REGULAR', 'Presencial', 'ABERTA', '5T12', 'Prédio 2 - Sala 2211', '11/12 alunos']

输出数据示例:

SUBJECT1 = ['EPRI02 - ADMINISTRAÇÃO', '2018.1', 'IGOR AZEVEDO DOS SANTOS CITTY ROSA (32h)', 'REGULAR', 'Presencial', 'ABERTA', '6T45', 'Anexo 1 - Sala 5', '90/91 alunos']

SUBJECT2 = ['ECAI06.1 - AUTOMAÇÃO DE SISTEMAS INDUSTRIAIS I', '2018.1', 'LUIZ FELIPE PUGLIESE (32h)', 'REGULAR', 'Presencial', 'ABERTA', '6M45', 'Anexo 3 - Sala 11', '13/24 alunos']

SUBJECT3 = ['ECA022.2 - Automação e Supervisão de Processos II (Prática)', '2018.1', 'LUIZ FELIPE PUGLIESE (32h)', 'REGULAR', 'Presencial', 'ABERTA', '5M23', 'Prédio 2 - Sala 2211', '9/12 alunos', '2018.1', 'LUIZ FELIPE PUGLIESE (32h)', 'REGULAR', 'Presencial', 'ABERTA', '5T12', 'Prédio 2 - Sala 2211', '11/12 alunos']

Tags: 数据列表enumprdetailsregularsaladio
1条回答
网友
1楼 · 发布于 2024-09-27 09:35:54

整理数据的一种方法是使用collections.defaultdict。你知道吗

from collections import defaultdict

SUBJECT = ['EPRI02 - ADMINISTRAÇÃO', 'ECAI06.1 - AUTOMAÇÃO DE SISTEMAS INDUSTRIAIS I', 'ECA022.2 - Automação e Supervisão de Processos II (Prática)']

DETAILS = ['EPRI02 - ADMINISTRAÇÃO', '2018.1', 'IGOR AZEVEDO DOS SANTOS CITTY ROSA (32h)', 'REGULAR', 'Presencial', 'ABERTA', '6T45', 'Anexo 1 - Sala 5', '90/91 alunos', 
'ECAI06.1 - AUTOMAÇÃO DE SISTEMAS INDUSTRIAIS I', '2018.1', 'LUIZ FELIPE PUGLIESE (32h)', 'REGULAR', 'Presencial', 'ABERTA', '6M45', 'Anexo 3 - Sala 11', '13/24 alunos', 
'ECA022.2 - Automação e Supervisão de Processos II (Prática)', '2018.1', 'LUIZ FELIPE PUGLIESE (32h)', 'REGULAR', 'Presencial', 'ABERTA', '5M23', 'Prédio 2 - Sala 2211', '9/12 alunos', '2018.1', 'LUIZ FELIPE PUGLIESE (32h)', 'REGULAR', 'Presencial', 'ABERTA', '5T12', 'Prédio 2 - Sala 2211', '11/12 alunos']

d = defaultdict(list)
subjects = set(SUBJECT)

for item in DETAILS:
    if item in subjects:
        current_item = item
    else:
        d[current_item].append(item)

结果:

defaultdict(<class 'list'>, {'EPRI02 - ADMINISTRAÇÃO': ['2018.1', 'IGOR AZEVEDO DOS SANTOS CITTY ROSA (32h)', 'REGULAR', 'Presencial', 'ABERTA', '6T45', 'Anexo 1 - Sala 5', '90/91 alunos'],
                             'ECAI06.1 - AUTOMAÇÃO DE SISTEMAS INDUSTRIAIS I': ['2018.1', 'LUIZ FELIPE PUGLIESE (32h)', 'REGULAR', 'Presencial', 'ABERTA', '6M45', 'Anexo 3 - Sala 11', '13/24 alunos'],
                             'ECA022.2 - Automação e Supervisão de Processos II (Prática)': ['2018.1', 'LUIZ FELIPE PUGLIESE (32h)', 'REGULAR', 'Presencial', 'ABERTA', '5M23', 'Prédio 2 - Sala 2211', '9/12 alunos', '2018.1', 'LUIZ FELIPE PUGLIESE (32h)', 'REGULAR', 'Presencial', 'ABERTA', '5T12', 'Prédio 2 - Sala 2211', '11/12 alunos']})

然后,您可以通过标准字典表示法轻松访问与特定主题相关的详细信息。你知道吗

使用字典的好处是您不必维护索引映射。要向主题添加另一个相关细节,只需执行d['BAC024 - MATEMÁTICA VI'].append('Presencial')。你知道吗

相关问题 更多 >

    热门问题