我有一个如下所示的列表:
data = [['info', 'numbers', 'more info'], ['info', 'numbers', 'more info'], ['..*this is dynamic so it could have hundreds*..']]
从动态文件读入 data
并将其拆分为这样,因此元素数量未知。
我要做的是在项目之间用':'
重新加入信息,并将其存储到每行的文本文件中,但问题是循环迭代数据元素并将整数增加到用于数据列表。
这是一个片段:
#not sure what type of loop to use here
# to iterate through the data list.
saveThis = ':'.join(data[n])
file2.write(saveThis+'\n')
感谢
答案 0 :(得分:2)
展平列表,然后加入。 itertools.chain.from_iterable()
进行扁平化:
from itertools import chain
':'.join(chain.from_iterable(data))
这会在{strong>所有所有子列表中的项目之间放置一个:
,将它们写成一个长字符串。
演示:
>>> from itertools import chain
>>> ':'.join(chain.from_iterable(data))
'info:numbers:more info:info:numbers:more info:..*this is dynamic so it could have hundreds*..'
如果您需要将每个子列表写入新行,只需循环data
:
for sublist in data:
file2.write(':'.join(sublist) + '\n')
或使用嵌套列表理解:
file2.write('\n'.join(':'.join(sublist) for sublist in data) + '\n')
答案 1 :(得分:1)
这是你要找的吗?假设你没有将这个n用于迭代数据列表以外的任何事情,你可以完全摆脱它并做一个像这样的好循环:
for item in data:
saveThis = ':'.join(item)
file2.write(saveThis + '\n')
如果您愿意,可以将它浓缩得更多,但我可能会避免这种情况。可读性很重要!
# Condensed to one line, but a little harder to read:
file2.write('\n'.join(':'.join(item) for item in data))
答案 2 :(得分:0)
如果整数只用作data
的索引,你可以完全省略整数,然后迭代data
的元素:
for datum in data:
saveThis = ':'.join(datum)
file2.write(saveThis + '\n')
答案 3 :(得分:0)
你的意思是这样的:
In [5]: a
Out[5]: [['info', 'numbers', 'more info'], ['info', 'numbers', 'more info']]
In [6]: [item for sublist in a for item in sublist]
Out[6]: ['info', 'numbers', 'more info', 'info', 'numbers', 'more info']
In [7]: ":".join([item for sublist in a for item in sublist])
Out[7]: 'info:numbers:more info:info:numbers:more info'
答案 4 :(得分:0)
如果你真的想要“循环遍历数据元素并递增一个整数”,那正是enumerate
的用途:
for i, element in enumerate(data):
# i is the integer, incremented each time through the loop
但是,我不明白为什么你认为你想要这个问题。 (也许如果您更好地描述了问题,或者只是向我们展示了您拥有的代码以及您不知道如何编写的部分?)