0

我有一个看起来像这样的列表:

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')

谢谢

4

5 回答 5

2

展平列表,然后加入。itertools.chain.from_iterable()做扁平化:

from itertools import chain

':'.join(chain.from_iterable(data))

这将在所有子列表中的所有项目之间放置一个:将它们写成一个长字符串。

演示:

>>> 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')
于 2013-05-21T21:35:22.463 回答
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))
于 2013-05-21T21:34:43.650 回答
0

如果整数仅用作 的索引data,则可以完全省略整数并迭代 的元素data

for datum in data:
    saveThis = ':'.join(datum)
    file2.write(saveThis + '\n')
于 2013-05-21T21:35:27.603 回答
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'
于 2013-05-21T21:35:52.233 回答
0

如果你真的想要“循环遍历数据元素并增加一个整数”,这正是enumerate它的用途:

for i, element in enumerate(data):
    # i is the integer, incremented each time through the loop

但是,我不明白你为什么认为你想要解决你的问题。(也许如果您更好地描述了问题,或者只是向我们展示了您拥有的代码以及您不知道如何编写的部分?)

于 2013-05-21T21:40:13.113 回答