2014-01-15 18 views
0

我有元素的列表,我需要生成這些一堆:生成封閉div標籤每四個元素在python

<div class="row"> 
    <div class="row-element"> datapoint 1</div> 
    <div class="row-element"> datapoint 2</div> 
    <div class="row-element"> datapoint 3</div> 
    <div class="row-element"> datapoint 4</div> 
</div> 

.... # And so on 

它得到棘手試圖做到這一點。名單some_list長度可以是奇數,甚至可以是。每個div行最多應有四個子行元素。

for i,x in enumerate(some_list): 
    if i%4 == 0: 
     print '<div class="row">' 
     tmp = i+4 

    print '<div class="row-element">' + x + '</div>' 

    if tmp-1==i: 
     print '</div>' 

這類作品只有在名單是整除4,並且也真的很醜陋的代碼明智。

如何在python中乾淨地生成封閉的偶數和奇數元素的div標籤?

+0

您可以使用哪些功能呢?你說你更喜歡使用'for'的代碼,但是在你的實現中使用'enumerate'? – laike9m

回答

1

加載文檔類似lxml.html document和使用的技術從這個great answer

>>> list(chunks(range(0, 11), 4)) 
[[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10]] 
+0

嗯..我正在使用Python Web框架,但我試圖動態生成使用其模板的div標籤。它們限制了Python代碼可以在模板中運行,所以對於循環來說很簡單,對我來說會更好。 – user21398

+1

請按照他包含的鏈接。 'chunks'只是一個發生器內的'for'循環,需要時使用yield。然後你只需要你自己的for循環來完成打印。這比瘋狂的@木主人可以提出的答案要好得多。你的web框架不可能不允許這個代碼。 – mhlester

0

我不知道這是否真的更清潔......我打印</div>在兩個地方,我不太喜歡。

for i, x in enumerate(some_list): 
    if not i % 4: 
     if i: 
      print '</div>' 
     print '<div class="row">' 

    print '<div class="row-element">' + x + '</div>' 

print '</div>'