Python 在'表示的边界内工作;无';在列表中

Python 在'表示的边界内工作;无';在列表中,python,Python,我有一个输入列表,例如: mylist = [('a', [(2, 4), (0, 5)]), ('b', [(3, 9), (1, 1)]), ("'", None), ('c', [(1,7), (2, 8)])] 我必须对列表中的值进行比较。类似(2,4)的项表示一个范围。列表中的“无”项类似于边界。比较是在边界内进行的。这里,首先比较a和b。比较基本上是在不同条件下给出的值之间进行的,比如它们是否重叠,因为它们是范围。因此,在与邻居的范围进行比较后,范围会发生变化 if within

我有一个输入列表,例如:

mylist = [('a', [(2, 4), (0, 5)]), ('b', [(3, 9), (1, 1)]), ("'", None), ('c', [(1,7), (2, 8)])] 
我必须对列表中的值进行比较。类似(2,4)的项表示一个范围。列表中的“无”项类似于边界。比较是在边界内进行的。这里,首先比较a和b。比较基本上是在不同条件下给出的值之间进行的,比如它们是否重叠,因为它们是范围。因此,在与邻居的范围进行比较后,范围会发生变化

if within the boundary : (something like "if ! None : then continue")
    do the comparisons between the items inside the boundary 
if None :
    move to next boundary
    do the comparisons between the items inside the next boundary   
比较是使用简单的规则,例如,比较(2,4)和(3,9),然后这两个部分重叠,从而选择它们之间的共同点。因此,结果为(3,4)


我已经为所有的比较规则编写了代码,但是我没有限制地尝试了它们。但它们应该在边界之内。我无法用代码来表达界限。谢谢。

您可以使用
itertools.groupby
测试项目的第二个值是否为
None
,从而对项目进行分组

>>> import itertools
>>> mylist
[('a', [(2, 4), (0, 5)]), ('b', [(3, 9), (1, 1)]), ("'", None), ('c', [(1, 7), (2, 8)])]
>>> grp = itertools.groupby(mylist, lambda i: i[1] is None)
>>> res = [tuple(i[1]) for i in grp if not i[0]] #use parantheses for faster generator expression.
>>> pprint.pprint(res)
[(('a', [(2, 4), (0, 5)]), ('b', [(3, 9), (1, 1)])),
 (('c', [(1, 7), (2, 8)]),)]
现在,您可以使用简单的for循环进行比较:

for item in res:
    #do comparisons

您可以使用
itertools.groupby
测试项目的第二个值是否为
None
,从而对项目进行分组

>>> import itertools
>>> mylist
[('a', [(2, 4), (0, 5)]), ('b', [(3, 9), (1, 1)]), ("'", None), ('c', [(1, 7), (2, 8)])]
>>> grp = itertools.groupby(mylist, lambda i: i[1] is None)
>>> res = [tuple(i[1]) for i in grp if not i[0]] #use parantheses for faster generator expression.
>>> pprint.pprint(res)
[(('a', [(2, 4), (0, 5)]), ('b', [(3, 9), (1, 1)])),
 (('c', [(1, 7), (2, 8)]),)]
现在,您可以使用简单的for循环进行比较:

for item in res:
    #do comparisons

以其他问题的代码为基础,如果您想分别处理
res
的每个部分并累积结果,可以这样做(使用@utdemir答案中的方法):


以其他问题的代码为基础,如果您想分别处理
res
的每个部分并累积结果,可以这样做(使用@utdemir答案中的方法):


您希望得到什么样的结果?结果将与输入列表的类型相同,只是在比较其中的值时,值发生了变化。它们实际上代表范围。比如说,当我们比较a和b时,(2,4)将与(3,9)进行比较,a的结果取决于给定的规则或条件。所以a的值将替换为类似于a的东西,[(2,3),(0,1)]。谢谢。投票被否决了,因为还不清楚。澄清问题,以便我们能够理解您试图做什么,我将修改下一票。您希望得到什么结果?结果将与输入列表的类型相同,除了在比较内部值时值的变化。它们实际上代表范围。比如说,当我们比较a和b时,(2,4)将与(3,9)进行比较,a的结果取决于给定的规则或条件。所以a的值将替换为类似于a的东西,[(2,3),(0,1)]。谢谢。投票被否决了,因为还不清楚。澄清问题,以便我们了解您的意图,我将修改否决票。非常感谢。itertools是否也可以处理文件。如果我给一个文件来分组项目,那么它会工作吗?@cvani,一个文件对象是一个iterable,因此itertools也会工作。非常感谢。itertools是否也可以处理文件。如果我给一个文件来分组项目,那么它会工作吗?@cvani,一个文件对象是一个iterable,因此itertools也会工作。