1

所以我有一个家庭作业,我在另一篇文章中问过,但不是很详细,因此我自己的错没有得到我想要的答案。我需要做的是打开一个结构化的文本文件,其中文件的每一行都属于一个特定的类别。虽然类别和顺序不会改变,但它们重复的次数可能会改变。我的工作是获取每一行(忽略前两行)并向该行添加一个 XML 标记。为此,我提出了一个包含类别字符串名称的列表。我遇到的问题是我无法弄清楚如何以与文件中的文本行相同的速率遍历类别列表。

例如:

如果我的文本文件是:

peas
carrots
broccoli
beans

我的清单是

tagList=["apples","oranges","bananas","pears"]

然后我不断得到:

<apples>peas</apples>
<oranges>peas</oranges>
<bananas>peas</bananas>
<pears>peas</pears>
<apples>carrots</apples>
<oranges>carrots</oranges>
<bananas>carrots</bananas>
<pears>carrots</pears>
ect....

而不仅仅是

<apples>peas</apples>
<oranges>carrots</oranges>
<bananas>broccoli</bananas>
<pears>beans</pears>

我的印象是我需要一个嵌套的 for 循环,所以我有这样的东西。

for line in file:
    for x in tagList:
        outputFile.write("<"+x+">"+line+"</"+x+">\n")

我完全理解为什么事情会以现在的方式出现,我只是对如何解决它感到迷茫。我发现其他关于以相同速率迭代 2 个列表的帖子,但似乎找不到任何关于以相同速率迭代文件中的行和列表的任何内容。任何帮助将不胜感激。谢谢!!!

4

3 回答 3

1

不知道这里关于回答作业的政策是什么,但我会解释你的代码在做什么,以防万一:

它的工作方式与您编码的方式完全相同。

您嵌套了一个 for 循环(文件中的 tagList)。

因此,您实际上要做的是浏览文件,如果有 4 个项目,则在每个点 (1-4),您将再次循环通过 tagList (其中有 4 个项目)。

所以在第一步,你得到了豌豆(来自文件),但在你输出它之前,你进入另一个 for 循环(tagList),一旦你在那里,你会输出“豌豆”。

然后第二个 for 循环将再经过 3 次,您将总共获得 4 个“豌豆”。迭代完成后,您将返回第一个 for 循环并移动到下一个元素,这一次将输出胡萝卜。

希望这能解释你在这里做什么。

于 2012-12-03T02:56:06.480 回答
1

Unutbu 是正确的 - zip 在这里最容易使用。

>>> lista = ['a', 'b', 'c', 'd']
>>> listb = [1, 2, 3, 4]
>>> for a, b in zip(lista, listb):
    print a, b

a 1
b 2
c 3
d 4

嵌套的 for 循环看起来像这样,并且实际上会将您的列表相乘 - 我认为这不是您想要的。

>>> for a in lista:
    for b in listb:
        print a, b


a 1
a 2
a 3
a 4
b 1
b 2
...

另一种方法是使用列表索引,尽管由于 Python 具有 zip 功能,您最好使用它。

>>> for i in range(4):
    print lista[i], listb[i]


a 1
b 2
c 3
d 4
于 2012-12-03T03:00:09.560 回答
0
    python 3.2
    list comprehension

    >>> [["<"+v+">"+i+"</"+v+">"] for i in st for v in tag]
于 2012-12-03T14:06:02.560 回答