您的问题是每次循环 List 时,都会使用 List2 = [] 重置 List2 的值。相反,在你的 for 循环之前调用它:
>>> List = [('227', 1, 227), ('233', 1, 233), ('297', 1, 297), ('298', 3, 298), ('316', 1, 316), ('240', 1, 240), ('255', 1, 91), ('255', 92, 184)]
>>> List2 = []
>>> for item in List:
... ID = item[0]
... Start = item[1]
... Stop = item[2]
... if item not in List2:
... List2.extend(item)
... elif item in List2:
... continue
... print List2
...
['227', 1, 227]
['227', 1, 227, '233', 1, 233]
['227', 1, 227, '233', 1, 233, '297', 1, 297]
['227', 1, 227, '233', 1, 233, '297', 1, 297, '298', 3, 298]
['227', 1, 227, '233', 1, 233, '297', 1, 297, '298', 3, 298, '316', 1, 316]
['227', 1, 227, '233', 1, 233, '297', 1, 297, '298', 3, 298, '316', 1, 316, '240', 1, 240]
['227', 1, 227, '233', 1, 233, '297', 1, 297, '298', 3, 298, '316', 1, 316, '240', 1, 240, '255', 1, 91]
['227', 1, 227, '233', 1, 233, '297', 1, 297, '298', 3, 298, '316', 1, 316, '240', 1, 240, '255', 1, 91, '255', 92, 184]
>>> List2
['227', 1, 227, '233', 1, 233, '297', 1, 297, '298', 3, 298, '316', 1, 316, '240', 1, 240, '255', 1, 91, '255', 92, 184]
>>>
基本上,上面的代码所做的就是扁平化 List1。我建议列表理解,而不是经历那个:
>>> List1
[('227', 1, 227), ('233', 1, 233), ('297', 1, 297), ('298', 3, 298), ('316', 1, 316), ('240', 1, 240), ('255', 1, 91), ('255', 92, 184)]
>>> List1 = [('227', 1, 227), ('233', 1, 233), ('297', 1, 297), ('298', 3, 298), ('316', 1, 316), ('240', 1, 240), ('255', 1, 91), ('255', 92, 184)]
>>> List2 = [item for tup in List1 for item in tup]
>>> List2
['227', 1, 227, '233', 1, 233, '297', 1, 297, '298', 3, 298, '316', 1, 316, '240', 1, 240, '255', 1, 91, '255', 92, 184]
>>>
希望这会有所帮助!
如果您想找出item[1] 和item[2] 之间的最大区别,请执行以下操作:
>>> import math>>> List1 = [('227', 1, 227), ('233', 1, 233), ('297', 1, 297), ('298', 3, 298), ('316', 1, 316), ('240', 1, 240), ('255', 1, 91), ('255', 92, 184)]
>>> List1[[math.fabs(item[2]-item[1]) for item in List1].index(max([math.fabs(item[2]-item[1]) for item in List1]))]
('316', 1, 316)
>>>