Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从现有列表中创建重复元素的列表_Python_List_Text Files - Fatal编程技术网

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

Python 从现有列表中创建重复元素的列表,python,list,text-files,Python,List,Text Files,我正在上课学习摩尔斯电码。在课程开始时,我们会收到一个.txt格式的单词列表。我把这个列表转换成莫尔斯电码.mp3文件。(LCWO.net)每个单词播放一次,但是,最好是播放多次,这样我就可以学习模式 我的目标是获取原始文本文件,并根据用户输入多次复制每个单词。我一直在手动输入,但我认为计算机可以更容易地完成这项工作。因此,我选择Python来尝试创建程序。到目前为止,我已经知道如何打开.txt文件,创建一个列表,去掉每个单词后面的换行符,然后将列表打印到屏幕上 如何循环浏览此列表并根据用户输入

我正在上课学习摩尔斯电码。在课程开始时,我们会收到一个.txt格式的单词列表。我把这个列表转换成莫尔斯电码.mp3文件。(LCWO.net)每个单词播放一次,但是,最好是播放多次,这样我就可以学习模式

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

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

文件名是“words.txt”

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

我意识到我要求你做这项工作,但我已经阅读了Python文档,我正在努力寻找解决方案

谢谢你的帮助


Scott

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

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

import itertools

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

通过这种方式,您可以保持元素的顺序

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

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

你可以做:

>>> [e for s in li for e in [s,s,s]]
['cat', 'cat', 'cat', 'dog', 'dog', 'dog', 'chicken', 'chicken', 'chicken']
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]
或者,由于字符串是固定不变的,如果您也这样做,您不会感到意外:

>>> [e for s in li for e in [s]*3]
['cat', 'cat', 'cat', 'dog', 'dog', 'dog', 'chicken', 'chicken', 'chicken']
这是Alex Martelli关于如何展平列表的修改。在本例中,
[s,s,s]
或字符串三次

如果您正在读取文件,则可以执行以下操作:

>>> [e for s in li for e in [s,s,s]]
['cat', 'cat', 'cat', 'dog', 'dog', 'dog', 'chicken', 'chicken', 'chicken']
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]
此脚本应完成以下操作:
不用担心。尝试一下。尽你所能。当你真的坚持解决这个问题时,发布你目前为止将要实现的代码。我将尝试一下。我不了解itertools函数,但会在文档中详细阅读。谢谢。我读了一点关于理解的清单,这似乎和我对它们的理解很相似。这似乎是一个简单的解决方案。我也要试一试。谢谢你的帮助!“对于范围(3)中的x:”是否将每个单词乘以3次?有没有办法用变量x替换“3”,其中x=3来自用户输入?谢谢你的帮助!否,对于范围内的x,执行以下块3次,该块输出字。是的,您可以在代码中看到数字的任何地方使用带有数值的变量。这个解决方案对我来说很有意义,因为我可以理解逻辑。非常感谢你的帮助!我很高兴能帮上忙。我尝试了你的解决方案,用“testfile.txt”代替“text.txt”。然而,我得到了一个错误,没有定义“word”。是否使用open()打开并读取文件?还是我需要先打开文件?让我看看我是否理解。[11]中的第一个列表是从原始列表“x”创建的。然后[12]中的新列表取x(原始列表)并将该列表乘以3。因此,现在我们有一个列表,其中包含三组单词,每个单词都相同(附加)。现在,对列表进行排序,使每个单词三次相同,然后移动到列表中的下一个单词并执行相同的操作。然后输出列表。是这样吗?谢谢你的帮助!我