【问题标题】:List iteration to new list Python列表迭代到新列表 Python
【发布时间】:2014-06-24 22:53:04
【问题描述】:

我有以下格式的列表。下面的示例是列表的一个子集:

[('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[0] 是 ID,item[1] 是起点,item[2] 是终点。 item[0]实际上是一长串数字和字母,我只是简化了它,但它是一个字符串而不是一个int。

我想遍历列表找到具有最低起始值和最高终止值的唯一 ID。

如果只添加一个ID有问题

for item in List:
    ID = item[0]
    Start = item[1]
    Stop = item[2]
    List2 = []
    if item not in List2:
        List2.extend(item)
    elif item in List2:
        continue
    print List2

新列表中只有最后一项。我该如何解决这个问题。

【问题讨论】:

  • 您在每次循环迭代时重新创建List2 列表。我不清楚您所说的具有最低起始值和最高终止值的唯一 ID 是什么意思,您能告诉我们您的搜索的预期输出是什么吗?
  • 我看到你正在破坏 ID 中的项目,停止并开始但你没有使用它...如果不需要使用列表理解..
  • 预期输出为 [('227', 1, 227), ('233', 1, 233), ('297', 1, 298), ('316', 1 , 316), ('240', 1, 240), ('255', 1, 184)]。具有该 ID 的所有起始值和终止值中最低和最高两个值的 ID 号

标签: python list loops python-2.7


【解决方案1】:

您的问题是每次循环 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)
>>> 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-06
    • 2012-05-12
    • 1970-01-01
    • 2015-09-25
    • 2018-04-29
    相关资源
    最近更新 更多