Python只要元素存在于列表中,就迭代一个整数

时间:2013-05-21 21:32:05

标签: python loops

我有一个如下所示的列表:

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

感谢

5 个答案:

答案 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

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