从现有列表中创建重复元素的列表

问题描述 投票:1回答:5

我正在上一堂课,学习摩尔斯电码。在课程开始时,我们将获得.txt格式的单词列表。我将此列表转换为摩尔斯电码.mp3文件。 (LCWO.net)每个单词都播放一次,但是最好反复播放一次,这样我才能学习模式。

我的目标是获取原始文本文件,并根据用户输入多次复制每个单词。我一直在手动键入此内容,但认为计算机可以更轻松地完成此操作。因此,我选择了Python尝试创建该程序。到目前为止,我已经弄清楚了如何打开.txt文件,创建列表,在每个单词后去除换行符,然后将列表打印到屏幕上。

我如何循环浏览此列表,并根据用户输入创建每个单词的副本?例如,用户将为每个单词的3个副本输入“ 3”。例如,如果单词列表是['cat', 'dog', 'chicken'],如何创建一个列表:['cat', 'cat', 'cat', 'dog', 'dog', 'dog', 'chicken','chicken', 'chicken'],然后将此列表写入文本文件,以便每个单词都在一行上?

文件名是'words.txt'

cat cat cat
dog dog dog
chicken chicken chicken

我想我可以弄清楚如何获得用户输入并将其分配给变量,然后将此变量用作生成新列表的循环的一部分。我也认为我可以弄清楚如何将新列表写入文件。我需要帮助的部分是弄清楚如何根据用户输入(单词的迭代次数)来创建列表。

我意识到我正在要求您完成这项工作,但是我已经阅读了Python文档,并且正在努力寻找解决方案。

感谢您的帮助!

斯科特

python list text-files
5个回答
1
投票

假设您有l = ['cat', 'dog'],并且您希望每个元素重复3次,则可以使用itertools库按如下所示进行操作

import itertools

l = ['cat', 'dog']
duplicate = list(itertools.chain.from_iterable(itertools.repeat(x, 3) for x in l))

以这种方式保持元素的顺序


1
投票

给出:

>>> li
['cat', 'dog', 'chicken']

您可以做:

>>> [e for s in li for e in [s,s,s]]
['cat', 'cat', 'cat', 'dog', 'dog', 'dog', 'chicken', 'chicken', 'chicken']

或者,由于字符串是固定且不可变的,因此您也不会感到惊讶:

>>> [e for s in li for e in [s]*3]
['cat', 'cat', 'cat', 'dog', 'dog', 'dog', 'chicken', 'chicken', 'chicken']

[这是Alex Martelli answer关于如何展平列表清单的修改。在这种情况下,[s, s, s]或您的字符串3次。

如果正在读取文件,则可以执行:

n=3
with open(ur_file) as f_in:
    flat_list=[word for line in f for word in line.split()]
    duped_words=[mult for word in flat_list for mult in [s]*n]

0
投票

您不需要任何库(甚至是标准itertools)。只是将您的列表多表为整数。

In[11]: x = ["cat", "dog", "chicken"]
In[12]: x * 3
Out[12]: ['cat', 'dog', 'chicken', 'cat', 'dog', 'chicken', 'cat', 'dog', 'chicken']
In[13]: sorted(x * 3)
Out[13]: ['cat', 'cat', 'cat', 'chicken', 'chicken', 'chicken', 'dog', 'dog', 'dog']  

0
投票

一种简单的方法是在循环中放入另一个循环;

with open('words.txt') as f:
  for line in f.readlines():
    for x in range(3):
      print(word_to_morse(line))

0
投票

此脚本应该可以解决问题:

count = int(input('Input you number: '))
with open('text.txt','r') as f:
    l = [word for word in f.read().split('\n')]
with open('text2.txt','w') as f:
    for n in range(count):
        f.write(' '.join(l))
        f.write('\n')
© www.soinside.com 2019 - 2024. All rights reserved.