如何从元素列表中的当前索引打印每个第三个元素

时间:2017-07-12 00:56:41

标签: python

我有元素列表lst = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']。如何以下列格式打印当前索引中的每个第三个元素? [[ 'A', 'E', 'I'],[ 'B', 'F', 'J'],[ 'C', 'G'],[ 'D', 'H']]

def printFormat(lst, columns):
  for i in range(0, len(lst)):
    print lst[i]
    for j in range():
    #if (i)%3==0:
    #    print lst[i]


if __name__ == '__main__':
    lst = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']
    columns = 3
    printFormat(lst, columns)  

2 个答案:

答案 0 :(得分:3)

>>> lst
['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']
>>> num_of_parts=4
>>> newlst=[lst[i::4] for i in range(num_of_parts)]
>>> newlst
[['A', 'E', 'I'], ['B', 'F', 'J'], ['C', 'G'], ['D', 'H']]
>>> 

编辑1:添加一些解释和使用mod运算符的第二种方法

list_obj[start:stop:step]与方法slice(start, stop, step)类似。 start表示切片必须从哪里开始,切片在stop - 1处停止。如果忽略startstop,则会分别由0len(list) - 1替换。

因此,startstop旨在获取列表的子列表/切片,step获取该子列表中的每个step(每个第2个/第3个等)元素/片

以下是一些证明相同的例子:

>>> lst
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> lst[1:3]
[1, 2]
>>> lst[1:]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> lst[:3]
[0, 1, 2]
>>> lst[::2]
[0, 2, 4, 6, 8]
>>> lst[::1]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> lst[1::2]
[1, 3, 5, 7, 9]
>>> 

Mod运算符方法:

>>> lst
['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']
>>> num_of_parts=4
>>> newlst=[[lst[i] for i in range(len(lst)) if i%4 == j] for j in range(num_of_parts)]
>>> newlst
[['A', 'E', 'I'], ['B', 'F', 'J'], ['C', 'G'], ['D', 'H']]
>>> 

编辑2:使mod运算符方法更具可读性我们得到以下内容:

>>> lst=['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']
>>> newlst=[]
>>> for j in range(num_of_parts):
...     temp=[]
...     for i in range(len(lst)):
...             if i%4 == j:
...                     temp.append(lst[i])
...     newlst.append(temp)
... 
>>> newlst
[['A', 'E', 'I'], ['B', 'F', 'J'], ['C', 'G'], ['D', 'H']]
>>> 

答案 1 :(得分:3)

单线解决方案是:

>>> [lst[i::4] for i in range(4)]
[['A', 'E', 'I'], ['B', 'F', 'J'], ['C', 'G'], ['D', 'H']]