Поиск по вложенному списку с помощью оператора if - PullRequest
2 голосов
/ 06 ноября 2019

Я пытаюсь извлечь элементы из вложенного списка со значениями ниже 50 и соответствующими значениями для их отображения. Я пытался сделать это, но это ничего не дает.

Вот код:

newList = ["payroll", "accounting", "security", "office", "sales"]
deptNums = [10 * index for index in range(1, 16)]
deptInfo = [[]]

for row in range(0, len(newList)) :
    deptInfo.append([newList[row], deptNums[row]])
print(deptInfo)

belowFifty = []
for items in deptInfo:
        if (50 > deptNums[row]):
            belowFifty.append(newList[row],deptNums[row])
print(belowFifty)

Ответы [ 4 ]

3 голосов
/ 06 ноября 2019

Вы не перебираете переменную 'row' во втором цикле for. область видимости переменной 'row' заканчивается первым циклом for. Более подходящий код:

newList = ["payroll", "accounting", "security", "office", "sales"]
deptNums = [10 * index for index in range(1, 16)]
deptInfo = [[]]

for row in range(0, len(newList)) :
    deptInfo.append([newList[row], deptNums[row]])
print(deptInfo)

belowFifty = []
for item, number in zip(newList, deptNums):
    if 50 > number:
        belowFifty.append([item, number])
print(belowFifty)
2 голосов
/ 06 ноября 2019

Есть две проблемы: 1. Вы инициализируете deptInfo как [[]], следовательно, после добавления вы получаете:

[[],
 ['payroll', 10],
 ['accounting', 20],
 ['security', 30],
 ['office', 40],
 ['sales', 50]]
Вы перебираете элементы в deptInfo, но пытаетесь проверить deptNum с индексами (row), которые были предыдущей переменной итерации, которая в настоящее время имеет значение 5, а deptNum[5] имеет значение60, поэтому ваш if ничего не проверяет. Вот ваш фиксированный код:
newList = ["payroll", "accounting", "security", "office", "sales"]
deptNums = [10 * index for index in range(1, 16)]
deptInfo = []

for row in range(0, len(newList)) :
    deptInfo.append([newList[row], deptNums[row]])
print(deptInfo)
belowFifty = []
for items in deptInfo:
        if (50 > items[1]):
            belowFifty.append(items)
print(belowFifty)

Теперь вот сокращенный код:

newList = ["payroll", "accounting", "security", "office", "sales"]
deptNums = [10 * index for index in range(1, 16)]
print([[i,j] for i,j in zip(newList, deptNums) if j < 50])
2 голосов
/ 06 ноября 2019

Вам не нужно deptInfo.

Просто сделайте это:

belowFifty = []
for row in range(len(deptNums)):
    if (50 > deptNums[row]):
        belowFifty.append([newList[row],deptNums[row]])

belowFifty

Вывод:

[['payroll', 10], ['accounting', 20], ['security', 30], ['office', 40]]
0 голосов
/ 06 ноября 2019

Сокращенный подход с использованием понимания списка, а не обычных циклов.

Это то, что вам нужно? В этом примере используется функция zip() и понимание списка .

По сути, функция zip выравнивает два списка и выполняет их итерацию вместе - поэтому здесь мыможно объединить названия и номера отделов вместе и повторить их в виде пары .

newList = ["payroll", "accounting", "security", "office", "sales"]
# I edited this to match the length of your department names.
deptNums = [10 * index for index in range(1, len(newList))]

# Use list comprehension to iterate, test and create a new list all in ONE line.
deptInfo = [[num, dpt] for num, dpt in zip(newList, deptNums) if dpt < 50]

Вывод:

[['payroll', 10], ['accounting', 20], ['security', 30], ['office', 40]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...