我有元素列表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)
答案 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
处停止。如果忽略start
和stop
,则会分别由0
和len(list) - 1
替换。
因此,start
和stop
旨在获取列表的子列表/切片,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']]