Создайте частичные подсписки по индексу, отбрасывая некоторые данные [(x, y, z), ...] в [(x, y), ...] - PullRequest
0 голосов
/ 21 мая 2018

Я получил list1, в каждом из которых есть N предметов (x,y,z).Для z в list2 мне нужно создать новый список, в котором есть элементы из list1 только с (x,y), это нужно сделать и для list3, list4.

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]

Например, list5, который находится между list1 и list2, выглядит как

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

Кто-нибудь может предложить быстрый способ сделать это?Спасибо

1 Ответ

0 голосов
/ 21 мая 2018

Достаточно просто:

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)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...