Python 解释;[c代表cEdges中的c,如果c[0]中的secString为c]";

Python 解释;[c代表cEdges中的c,如果c[0]中的secString为c]";,python,syntax,list-comprehension,Python,Syntax,List Comprehension,我尝试查找的程序前面有一个错误,但被要求解释代码这一部分中发生了什么。下面是代码和我认为它在做什么,但在某些方面我不清楚。如能帮助理解,将不胜感激 for title in titles: secString = 'sec_%02d' % (title) titleCitations = [c for c in cEdges if secString in c[0]] intraCitations = [c for c in titleCitations if secSt

我尝试查找的程序前面有一个错误,但被要求解释代码这一部分中发生了什么。下面是代码和我认为它在做什么,但在某些方面我不清楚。如能帮助理解,将不胜感激

for title in titles:
    secString = 'sec_%02d' % (title)
    titleCitations = [c for c in cEdges if secString in c[0]]
    intraCitations = [c for c in titleCitations if secString in c[1]]
    print title, len(titleCitations), len(intraCitations), len(titleCitations) - len(intraCitations)
首先,secString获取与title相关的
'sec_uu%02d'
的剩余部分(我认为这只是查找所有引用title的字符串?)。然后创建一个标题列表

虽然我被括号里的部分弄糊涂了。如果我理解正确,它会使用cEdge,我认为它只是给定美国法律代码参考中的一对数字的列表,即26 USC 501变为just(26,501),并询问secString是否在c[0]点有值

(这就是我感到困惑的地方;我猜c[0]点可能对应于上述示例中的26,c[1]将对应于501?当然,我甚至不确定我是否正确理解了c部分。)

如果c[0]点已填满,则将其放入滴定中。然后,它将创建“内吸”列表。此列表查看标题列表,询问是否在secString中填写了c[1],如果是,则将其放入此列表中


我知道有些东西有问题,因为标题和插图似乎是同一个列表。

列表理解,例如:

result = [element for element in list if element in set]
相当于:

result = []
for element in list:
    if element in set:
        result.append(element)
集合中的表达式
元素(在您的例子中,
c[0]
c[1]
)是一个成员资格测试,如果
元素
包含在集合
中,则为真

至于您的代码的细节,
标题说明
指的是文档
标题
引用的来源[1]<代码>标题包含引用的文本(因为它们是从
标题
中选择的)和引用
标题

[1] 实际上,
titlections
intractions
都包含
c
中满足这些约束的元组

for title in titles:

    secString = 'sec_%02d' % (title)
将整数标题插入此字符串,并用零填充,使其长度为两个字符

    titleCitations = [c for c in cEdges if secString in c[0]] 
遍历cEdges的每个元素(它们本身就是列表),只包括第一个元素包含字符串justbuild的元素

    intraCitations = [c for c in titleCitations if secString in c[1]]
类似地,构建titlections的子列表,其中包含第二个元素包含secString的元素

    print title, len(titleCitations), len(intraCitations), len(titleCitations) - len(intraCitations)
打印书名、标题中元素的数量(可能是引用的次数)、插入的数量以及非插入的标题数量(这表明其中一个是另一个的子集)

字符串上的
%
运算符不是模数,它是一个格式化运算符,其行为类似于C的printf()<代码>%02d是一种格式化代码,将
标题
格式化为两位数。如果
title
仅为一位数字,则它会将其填充为
0
(例如,9变为
09

(这就是我感到困惑的地方;我猜c[0]点可能对应于上述示例中的26,c[1]将对应于501?当然,我甚至不确定我是否正确理解了c部分。)

这是正确的

titleCitations = [c for c in cEdges if secString in c[0]]
这将搜索
cEdges
中的项目,并查找标题中包含字符串
sec_XY
的项目,其中XY是前面的两位数

intraCitations = [c for c in titleCitations if secString in c[1]]
现在它搜索我们在上一步中找到的内容,再次搜索子字符串
sec_XY


最终结果是,
intractions
包含来自
cEdges
的所有项目的列表,其中第一个和第二个项目都包含子字符串
secu XY

也许您可以打印出
cEdges
是什么,并添加一个示例,以便清楚发生了什么?
秒%02d'(标题)
是字符串格式。它将
title
插入到该字符串中,但要确保填充了零:
sec_01
sec_99
。非常感谢您用如此清晰详细的语言解释这一点,并对其进行了编辑,使其更有意义。
intraCitations = [c for c in titleCitations if secString in c[1]]