我正在上课学习摩尔斯电码。在课程开始时,我们将获得.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文档,并且正在努力寻找解决方案。
感谢您的帮助!
斯科特
答案 0 :(得分:1)
假设您拥有{ "_id" : "9B3D757wQA9Mz4RGt", "name" : "BUYER" }
{ "_id" : "PDCJH8D6JDo9fttFj", "name" : "ADMINKAMB" }
{ "_id" : "XFGsrfB3Xsm6F8LbQ", "name" : "SELLER" }
{ "_id" : "hDLSvdo6wMnF47BBz", "name" : "ADMIN" }
{ "_id" : "ADMINKAMB", "children" : [ ] }
,并且您希望每个元素重复3次,则可以使用l = ['cat', 'dog']
库按照以下步骤进行操作
itertools
这样,您可以保持元素的顺序
答案 1 :(得分: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]
答案 2 :(得分:0)
您不需要任何lib(甚至是标准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']
答案 3 :(得分:0)
一种简单的方法是在循环中放入另一个循环;
with open('words.txt') as f:
for line in f.readlines():
for x in range(3):
print(word_to_morse(line))
答案 4 :(得分: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')