按索引创建部分子列表,将某些数据[(x,y,z),...]丢弃为[(x,y),...]

时间:2018-05-21 09:27:56

标签: python-2.7 nested-lists

我有一个list1,其中每个项目都有(x,y,z)个N项。对于list2中的z,我需要创建一个新列表,其中包含来自list1但只有(x,y)的项目,这需要list3list4

list1 = [(1250, 1442, 0), (1280, 1655, 1), (1029, 1680, 2), (624, 1573, 3), (732, 1159, 4), (1530, 1634, 5), (1885, 1628, 6), (2152, 1834, 7), (1252, 2459, 8), (1309, 3023, 9), (1376, 3585, 10), (1571, 2388, 11), (1682, 2952, 12), (1686, 3579, 13), (1184, 1391, 14), (1291, 1382, 15), (1117, 1440, 16), (1361, 1400, 17)]

list2 = [0,1,14,15,16,17]

list3 = [2,3,4,5,6,7,8,11]

list4 = [9,10,12,13]

例如,list5list1之间的list2看起来像

list5 = [(1250, 1442),(1280, 1655),(1184, 1391)......]

有人能建议一个快速的方法吗?谢谢

1 个答案:

答案 0 :(得分:1)

足够简单:

def getXYfromIndex(l, indexes):
    """Returns x,y from bigger list 'l' containing (x,y,z).
    Uses only those elements (by index) of 'l' that are in 'indexes'"""

    # list comprehension: returns x,y for each index in 'l' that is in 'indexes'
    return [(x,y) for x,y,_ in (l[i] for i  in indexes)]


list1 = [(1250, 1442, 0), (1280, 1655, 1), (1029, 1680, 2), (624, 1573, 3), (732, 1159, 4), 
         (1530, 1634, 5), (1885, 1628, 6), (2152, 1834, 7), (1252, 2459, 8), 
         (1309, 3023, 9), (1376, 3585, 10), (1571, 2388, 11), (1682, 2952, 12), 
         (1686, 3579, 13), (1184, 1391, 14), (1291, 1382, 15), (1117, 1440, 16), 
         (1361, 1400, 17)]

list2 = [0,1,14,15,16,17]

list3 = [2,3,4,5,6,7,8,11]

list4 = [9,10,12,13]

print(getXYfromIndex(list1,list2)) # use list5 = getXYfromIndex(list1,list2)
print(getXYfromIndex(list1,list3)) # to work with those (x,y) - I just print them
print(getXYfromIndex(list1,list4)) 

输出:

[(1250, 1442), (1280, 1655), (1184, 1391), (1291, 1382), (1117, 1440), (1361, 1400)]

[(1029, 1680), (624, 1573), (732, 1159), (1530, 1634), (1885, 1628), (2152, 1834), 
 (1252, 2459), (1571, 2388)]

[(1309, 3023), (1376, 3585), (1682, 2952), (1686, 3579)]