Здесь на самом деле происходит пара вещей.
Во-первых, вы не можете сравнить строку с целым числом.Например:
my_str = "65"
print(my_string < 65) # <-- RESULTS IN A `TypeError`
Это одна из причин, почему очень важно, чтобы мы точно знали, какова ваша структура данных.Просто сказать, что это кортеж, список или словарь, на самом деле недостаточно.Я бы посоветовал взглянуть на Как создать пример Minimal, Complete и Verifiable .
С учетом сказанного, что, чем вы разбиваете строку, мы можем предположить, что значение, возвращаемое из итерациив списке также есть строка, но это может быть не самый эффективный способ достичь того, что вы пытаетесь сделать.
Во-вторых, в вашем коде есть опечатка.Я предполагаю, что вы пытаетесь проверить, если LatA
меньше нуля, LatB
больше нуля, LongA
больше 65 и LongB
меньше 70;однако ваш оператор if проверяет, является ли LongA
больше 65 и меньше 70.
В-третьих, ваш код выше на самом деле не является допустимым кодом, и короткий ответ на ваш вопрос - да и нет, в зависимости отчто именно вы проверяете, и каковы желаемые результаты.Например:
llist = [
"item1, -5, 70, 5, 65", # MEETS CRITERA
"item2, 5, 60, -5, 75", # DOES NOT MEET CRITERA
]
match_found = False
value = ""
for lstr in llist:
ldata = lstr.split(',')
item = ldata[0]
LatA = int(ldata[1])
LongA = int(ldata[2])
LatB = int(ldata[3])
LongB = int(ldata[4])
if LatA < 0 and LatB > 0 and LongA > 65 and LongB < 70:
# This will get reassigned on each match. Try using
# value += {item}. There is also no need for a dict,
# you could simply use a *list* (not tuple).
value = {item}
print("Match Found")
match_found = True
if not match_found:
print("No Match Found")
будет обеспечивать базовое «да, * одинарное совпадение найдено во всей структуре данных whole », но будет постоянно выводить «Match Found»"для каждой записи в вашем списке, которая соответствует вашим критериям и переназначает переменную value
.Вы можете избежать этого, удалив оператор печати, если он вам абсолютно не нужен.Возможно, лучший способ достичь этого - использовать словарь, например:
# [LatA, LongA, LatB, LongB]
my_dict = {
"Location #1": [-5, 70, 5, 65],
"Location #2": [5, 60, -5, 75],
}
my_matches_list = []
for location, coords in my_dict.items():
if coords[0] < 0 and coords[1] > 65 and coords[2] > 0 and coords[3] < 70:
my_matches_list.append(location)
if my_matches_list:
print("Matches Found:")
for match in my_matches_list:
print(" - ", match)
else:
print("No Matches Found")
# Matches or No Matches Found Response...
# print("Matches Found" if my_matches_list else "No Matches Found")
После того, как вы заполнили my_matches_list
, вы можете использовать эти значения для сравнения со своим словарем.Однако это может быть не то, что вы ищете, но может даже исключить несколько списков или словарей, чтобы уменьшить путаницу.
Наконец, если вам нужно, чтобы ваш код был примерно таким же, как вы отправили, и вынужен более функциональный результат, чем да или нет, вы можете сделать следующее:
llist = [
"item1, -5, 70, 5, 65", # MEETS CRITERA
"item2, -1, 75, 10, 15", # MEETS CRITERA
"item3, 5, 60, -5, 75", # DOES NOT MEET CRITERA
]
matched_values = list()
for lstr in llist:
ldata = lstr.split(',')
item = ldata[0]
LatA = int(ldata[1])
LongA = int(ldata[2])
LatB = int(ldata[3])
LongB = int(ldata[4])
if LatA < 0 and LatB > 0 and LongA > 65 and LongB < 70:
matched_values.append(item) # += [item] works too, but not preferred.
if matched_values:
print("Matches Found:")
for match in matched_values:
print(" - ", match)
else:
print("No Matches Found")
Это просто проверит список matched_values
, чтобы увидеть, есть ли у него значение, которое даст истинный или ложный результат.