my_list = [my_list[int((i**2 + i)/2):int((i**2 + 3*i + 3)/2)] for i in range(int((-1 + (1 + 8*len(my_list))**0.5)/2))]
Run Code Online (Sandbox Code Playgroud)
是否有更简洁的解决方案将列表元素分组为比这更大的子组?
例子:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11] --> [[1], [2, 3], [4, 5, 6], [7, 8, 9, 10]]
[1, 2, 3, 4] --> [[1], [2, 3]]
[1, 2, 3, 4, 5, 6] --> [[1], [2, 3], [4, 5, 6]]
Run Code Online (Sandbox Code Playgroud)
编辑
以下是结果timeit:
from timeit import Timer
from itertools import count
def martijn(it):
it = iter(it)
return …Run Code Online (Sandbox Code Playgroud) 在提出这个问题之后,它收到了关于你如何做这样的事情的评论:
>>> def a(n):
print(n)
return a
>>> b = a(3)(4)(5)
3
4
5
Run Code Online (Sandbox Code Playgroud)
是否可以使用这个或类似的概念来索引列表my_list(n)而不是my_list[n]?
对于实例我在python中有三个函数和一个for循环,我希望顺序执行所有这些函数,例如在第一次迭代时应该执行函数1和在第二次迭代函数2上执行等等
这三个功能是:
from scapy.all import *
from random import randint
import threading
import time
from datetime import datetime
import multiprocessing
from itertools import count
#pktList = []
#pktsInt = 0
#def Packets():
# Generate packet
#for run_no in range(0,1)
p = raw_input('Enter PACKETs to send: ')
pktsInt = int(p)
pkts = IP(src="10.0.0.1",dst="10.0.0.2")/TCP()/"GET /HTTP/1.0\r\n\r\n"/Raw(RandString(size=120))
#print pkts
pkts[TCP].flags = "UFP"
pktList = []
for pktNum in range(0,pktsInt):
pktList.extend(pkts)
pktList[pktNum][TCP].dport = 80
#randint(1,65535) # Pkt has Ran PortNo.
print pktList[pktNum].summary()
#print len(pktList[pktNum])
#wrpcap('tcp-packets.pcap',pktList[pktNum]) …Run Code Online (Sandbox Code Playgroud) 在提出这个问题之后,我扩展了接受的答案,使其适用于二维列表:
class List(list):
def __call__(self, i):
def call(j):
return self[i][j]
return call
Run Code Online (Sandbox Code Playgroud)
和三维列表:
class List(list):
def __call__(self, i):
def call2(j):
def call3(k):
return self[i][j][k]
return call3
return call2
Run Code Online (Sandbox Code Playgroud)
但是如何为n维列表实现这个类呢?