2013-05-21 131 views
0

我有一個看起來像這樣的列表:Python的迭代只要元素在列表中存在整數

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

感謝

回答

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

對於數據中的子列表: file2.write('..... ..') 完美運作。非常感謝你,這正是我想要做的。我仍然知道python遠遠優於C++ – user2407199

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

如果該整數僅用作data的索引,那麼您可以只用整數分配完全和迭代的data元素來代替:

for datum in data: 
    saveThis = ':'.join(datum) 
    file2.write(saveThis + '\n') 
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' 
0

如果你真的想「在循環中的數據元素進行迭代和增加一個整數」,這正是enumerate是:

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

不過,我不明白爲什麼你想你想的是你的問題。 (也許如果你更好地描述了這個問題,或者只是向我們展示了你的代碼和你不知道怎麼寫的部分?)