首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解释"[c for c in cEdges if secString in c[0]]“

解释"[c for c in cEdges if secString in c[0]]“
EN

Stack Overflow用户
提问于 2012-10-17 10:40:42
回答 3查看 160关注 0票数 2

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

代码语言:javascript
复制
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使用'sec_%02d'中关于标题的其余部分(我认为这只是查找引用了标题的所有字符串?)。然后,它创建一个标题为“引用”的列表。

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

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

如果c点已填满,则将其放入标题中。然后,它创建内部列表。该列表查看c1列表,并询问是否在secString中填充了标题,如果是,则将其放入此列表中。

我知道有些事情是有问题的,因为标题引用和内部引用似乎是同一个列表。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-17 10:53:39

代码语言:javascript
复制
secString = 'sec_%02d' % (title)

字符串上的%运算符不是模运算符,它是一个格式化运算符,其行为类似于C的printf()。%02d是一种格式化代码,它将title格式化为两位数。如果title只有一个数字,那么它用一个0来填充它(例如,9变成09)。

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

这是正确的。

代码语言:javascript
复制
titleCitations = [c for c in cEdges if secString in c[0]]

这将在cEdges中搜索条目,并查找标题包含字符串sec_XY的条目,其中XY是前面的两位数。

代码语言:javascript
复制
intraCitations = [c for c in titleCitations if secString in c[1]]

现在,它搜索我们在上一步中找到的内容,再次搜索子字符串sec_XY

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

票数 1
EN

Stack Overflow用户

发布于 2012-10-17 10:47:51

如下所示的列表理解:

代码语言:javascript
复制
result = [element for element in list if element in set]

等同于:

代码语言:javascript
复制
result = []
for element in list:
    if element in set:
        result.append(element)

表达式element in set (在本例中为c[0]c[1])是一个成员测试,如果element包含在set中,则为真。

至于您的代码的细节,titleCitations引用了文档title引用的资源1。intraCitations包含由(因为它们是从titleCitations中选择的)和reference title引用的文本。

1实际上,titleCitationsintraCitations都包含c中满足这些约束的元组。

票数 0
EN

Stack Overflow用户

发布于 2012-10-17 10:48:40

代码语言:javascript
复制
for title in titles:

    secString = 'sec_%02d' % (title)

将整数标题插入到用零填充的字符串中,使其长度为两个字符

代码语言:javascript
复制
    titleCitations = [c for c in cEdges if secString in c[0]] 

遍历cEdges的每个元素(这些元素本身就是列表),并且只包括第一个元素包含just build字符串的那些元素

代码语言:javascript
复制
    intraCitations = [c for c in titleCitations if secString in c[1]]

类似地,构建一个包含第二个元素包含secString的元素的titleCitations子列表

代码语言:javascript
复制
    print title, len(titleCitations), len(intraCitations), len(titleCitations) - len(intraCitations)

打印书名、标题引用中元素的数量(可能是引用的次数)、引用的数量以及不是引用的titlecitations的数量(这表明一个是另一个的子集)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12926302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档