【问题标题】:Generate Cartesian product of each word from file1 x file2从 file1 x file2 生成每个单词的笛卡尔积
【发布时间】:2015-03-10 14:49:05
【问题描述】:

我搜索了很多网站和论坛,但都无法正常工作。我使用了 read()、readline() 结合了各种解决方案。我尝试了while和for循环,但仍然无法弄清楚。 这是任务。我有 2 个带有 txt 扩展名的文件。所以文件1是list1.txt,文件2是list2.txt

list1.txt 有

dog
flower
person

list2.txt 有

123
456

接下来是我想要的。新文档 list3.txt 包含:

dog123
dog456
flower123
flower456
person123
person456

但我不能使用 itertool,因为我不能合并 2 个文件。那是禁止的。 Any1 可以帮助寻找解决方案或提供一些建议。

【问题讨论】:

  • “我不能使用 itertool,因为我不能合并 2 个文件。这是禁止的。”意味着您根本不能使用itertools?或者只是你不能手动制作一个文件并使用itertools
  • 我只是在暗示答案不可能是:“将所有内容复制到一个 list.txt 并使用组合、排列或类似的东西”

标签: python cartesian-product


【解决方案1】:

这行得通:

with open('list1.txt', 'r') as l1, open('list2.txt', 'r') as l2, open('list3.txt', 'w') as l3:
    for left_part in l1:
        for right_part in l2:
            l3.write('%s%s\n' % (left_part.replace("\n",""), right_part.replace("\n","")))
        l2.seek(0)

【讨论】:

  • 为什么不直接使用with 这样您就不必关闭文件? docs.python.org/2/reference/…
  • 请注意,我添加了关闭 list1.txt 和 list2.txt
  • 这个代码和第一个不一样。我的意思是这不起作用..它只给了我来自 list1 的第一个单词和来自 list2 的第一个单词。我不得不停止脚本,因为它写了 n/a 次
  • 你确定吗?我已经测试过了。请注意有 l2.seek(0)
  • 可能你已经把 l2.seek(0) 放在了第二个循环中?
【解决方案2】:

看看Docs on Input and Output:

with open('list1.txt', 'r') as l1, open('list2.txt', 'r') as l2, open('list3.txt', 'w') as l3:
    for i, l in enumerate(l1):
        x = l1.readline()
        for j, k in enumerate(l2):
            l3.write('%s%s' % (x, l2.readline()))

【讨论】:

  • 您可以将前三行合二为一。
猜你喜欢
  • 2016-10-08
  • 1970-01-01
  • 2021-05-06
  • 2021-09-05
  • 2016-05-07
  • 2022-11-17
  • 2020-02-19
  • 2012-11-18
  • 2013-07-14
相关资源
最近更新 更多