Я пытаюсь использовать цикл for для вставки элемента из одного списка в первый элемент каждого списка в списке списков. - PullRequest
0 голосов
/ 19 июня 2019

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

new_expenses = ["petrol", "phone"]
new_expense_values = [""120", "20"]
final_expense_data = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0,]]

for i in new_expense_values:
    for j in range(len(new_expenses)):
        final_expense_data[j][0] = i 

print(final_expense_data)

Ответы [ 2 ]

0 голосов
/ 19 июня 2019

Нет смысла использовать double for loop, с этой строкой:

for i in new_expense_values:

на первом проходе у вас будет:

[['120', 0, 0, 0, 0, 0], ['120', 0, 0, 0, 0, 0]]

со вторым проходом, на который вы перезаписываете:

[['20', 0, 0, 0, 0, 0], ['20', 0, 0, 0, 0, 0]]

код:

new_expenses = ["petrol", "phone"]
new_expense_values = ["120", "20"]
final_expense_data = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0,]]

for j in range(len(new_expenses)):
    final_expense_data[j][0] = new_expense_values[j]

print(final_expense_data)

выход:

[['120', 0, 0, 0, 0, 0], ['20', 0, 0, 0, 0, 0]]
0 голосов
/ 19 июня 2019

В своем коде вы сначала пишете 120 в оба списка в final_expense_data, а затем пишете 20 в оба (из-за цикла for i in new_expense_values:).Вы должны использовать один и тот же индекс для всех итераций списков списков:

new_expenses = ["petrol", "phone"]
new_expense_values = ["120", "20"]
final_expense_data = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0,]]

for j in range(len(new_expenses)):
    final_expense_data[j][0] = new_expense_values[j] 

print(final_expense_data)

[['120', 0, 0, 0, 0, 0], ['20', 0, 0, 0, 0, 0]]


Но я рекомендую вам использовать dicts вместо разныхсписки. далеко проще изменить ваши данные с ними:

from pprint import pprint

final_expense_data = {
    'petrol': [0, 0, 0, 0, 0, 0],
    'phone': [0, 0, 0, 0, 0, 0],
    'waka': [0, 0, 0, 0, 0, 0]
}
new_expenses = {
    'petrol': 120,
    'phone': 20,
    'big_red_hat': 11111
}

for e in new_expenses:
    if e in final_expense_data:
        final_expense_data[e][0] = new_expenses[e]
    else:
        final_expense_data[e] = [0, 0, 0, 0, 0, 0]
        final_expense_data[e][0] = new_expenses[e]
pprint(final_expense_data)
{'big_red_hat': [11111, 0, 0, 0, 0, 0],
 'petrol': [120, 0, 0, 0, 0, 0],
 'phone': [20, 0, 0, 0, 0, 0],
 'waka': [0, 0, 0, 0, 0, 0]}
...