Поиск / Найти в списке списков в Python - PullRequest
0 голосов
/ 12 апреля 2020

У меня есть список списков, и я пытаюсь искать или адресовать данные в списках.

Например

print(data[0])
print(data[12])

Дает мне

['Spinward-Rimward', 'Sol', 0, 0, 'N/A', '']
['Spinward-Rimward', 'POL-6387', 2, -8, 'TWE', 'Atol']

И

print(data[0][0])

дает мне

Spinward-Rimward

И я можно получить отдельный элемент

index = data[0].index('Sol')
print(index)

Получает меня

1

Но поиск в списках списков меня поражает. У меня есть несколько сотен строк данных, и если я хочу, чтобы каждая строка, содержащая Spinward-Rimward, или каждая строка, где широта и долгота были меньше 10, я бываю в тупике.

Мне это нужно, потому что я планирую выполнять арифметические операции c на широте / долготе, когда люди вводят имя звездной системы, чтобы найти расстояние между двумя звездами.

tl; dr - я - нуб python, который заблокирован и решил сделать забавную игрушку для игроков из Alien RPG, у которой есть 2-я карта трехмерного пространства.

1 Ответ

1 голос
/ 12 апреля 2020

если бы я хотел, чтобы каждая строка, содержащая Spinward-Rimward, или каждая строка, в которой широта и долгота были меньше 10

Первая довольно проста, вы уже знаете ответ:

for item in data:
    if item[0] == 'Spinward-Rimward':
        print(item)

Во-вторых, вам будет удобно распаковать кортежи:

for spin, star, lat, lng, *_ in data:
    if lat <= 10 and lng <= 10:
        print(item)

То, что * звездный синтаксис означает «дай мне остальное» в виде списка и используя _ подчеркивание в качестве имени переменной является общепринятым способом сказать: «Я не буду использовать это значение, поэтому я даже не буду называть его настоящим именем». Для дополнительного кредита мы могли бы использовать этот синтаксис, чтобы изменить ответ на ваш первый вопрос:

for spin, *rest in data:
    if spin == 'Spinward-Rimward':
        print(rest)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...