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

2024-04-29 00:49:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在上课学习摩尔斯电码。在课程开始时,我们会收到一个.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文档,我正在努力寻找解决方案

谢谢你的帮助

斯科特


Tags: 文件用户txt列表电码格式副本单词
3条回答

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

import itertools

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

这样可以保持元素的顺序

它不需要任何库(即使是标准的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']  

鉴于:

>>> 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]

相关问题 更多 >