如何在python列表中表示项

2024-10-01 01:37:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个元组列表,如下所示:

[(time1, hashusi, servername, uri, referrer, useragent),
 (time2, hashusi, servername, uri, referrer, useragent),
 (time3, srcip, code, mime),
 (time4, hashusi, servername, uri, referrer, useragent),
 (time5, srcip, code, mime) ...]

如果项的长度是6,则表示它是一个请求,否则它是一个响应,现在我需要将此列表中的所有请求和响应配对,它们已经按时间排序,正如您在本例中看到的,前两项都是请求。你知道吗

我想一个接一个地检查这些项目,如果一个请求后面有一个响应,那么它们是一对,我会为它们分配一个编号。如果一个请求后面有一个请求,那么第一个请求应该被丢弃,并检查第二个请求后面是否有响应,等等

for item in mergelistsorted:
    if len(item) == 6 and flag == None: #The first item is a request
       ##need to check the next item##
       if len(next item) == 6:
          continue
       else:
          requestlist.append((item[0],item[1],item[2],item[3])) 

我不知道如何提及“下一项”


Tags: 列表lenifcodeuriitemnext元组
3条回答

定义此方法(source):

def pairwise(iterable):
    "s -> (s0,s1), (s1,s2), (s2, s3), ..."
    a, b = itertools.tee(iterable)
    next(b, None)
    return itertools.izip(a, b)

然后使用这个循环:

for curr, next in pairwise(list):

需要注意的是,您不会得到curr中的最后一项,最后一次迭代将是(next_to_last, last)。如果您想在最后的迭代中获得(last, None),您需要在pairwise定义中将izip更改为izip_longest。你知道吗

与其使用for item in list,不如使用for index in range(len(list))。你知道吗

然后您可以将item称为list[index]next item将是list[index+1]。你知道吗

您可以使用如下循环遍历对:

for prv, nxt in zip(ls[:-1], ls[1:]):
   ...     

例如:

ls = [
    'request1',
    'request2',
    'request3',
    'response3',
    'request4',
    'response4',
]

for prv, nxt in zip(ls[:-1], ls[1:]):
    if 'request' in prv and 'response' in nxt:
        print prv, nxt

相关问题 更多 >