将列表列表中的项目更改为指定值并将其用于计算
Change items in list of list into assigned value and use them for calculations
我正在尝试计算 Python 列表列表 (fixed_uncertainty2) 中所有列表的值。
首先,我需要将子列表的每个项目转换为字典分配的值 item_var(例如,将 'F' 转换为 2)。然后我想计算总和(然后将其存储在变量中或打印出来)。我需要为每个子列表执行此操作。所以对于下面的第一个子列表,它将被转换为 [2, 1, -2, -1, 2, 1],所以它的总和(保存为 comb_value)= 3.
使用下面的代码,我只能设法对第一个子列表执行此操作,但它不会将其他子列表中的值转换为数字。有谁知道错误在哪里?
i = 0
j = 0
comb = []
item_var = {'F': 2, 'f': 1, 'C': -2, 'c': -1}
fixed_uncertainty2 = [['F', 'f', 'C', 'c', 'F', 'f'], ['F', 'f', 'C', 'c', 'F', 'F'], ['F', 'f', 'C', 'c', 'f', 'F'], ['F', 'f', 'C', 'c', 'f', 'f'], ['F', 'f', 'C', 'c', 'C', 'c']]
while j in range(len(fixed_uncertainty2)):
comb = fixed_uncertainty2[j]
while i in range(len(comb)):
for item in comb:
comb[i] = item_var[item]
i += 1
comb_value = sum(comb)
错误在第一时间!你没有在每一轮完成后添加到“j”!
comb = []
item_var = {'F': 2, 'f': 1, 'C': -2, 'c': -1}
fixed_uncertainty2 = [['F', 'f', 'C', 'c', 'F', 'f'], ['F', 'f', 'C', 'c', 'F', 'F'], ['F', 'f', 'C', 'c', 'f', 'F'], ['F', 'f', 'C', 'c', 'f', 'f'], ['F', 'f', 'C', 'c', 'C', 'c']]
while j in range(len(fixed_uncertainty2)):
comb = fixed_uncertainty2[j]
while i in range(len(comb)):
for item in comb:
comb[i] = item_var[item]
i += 1
comb_value = sum(comb)
j+=1
顺便说一句,你为什么不使用 for
呢?只是为了避免这些小错误和更清晰的代码:
comb = []
item_var = {'F': 2, 'f': 1, 'C': -2, 'c': -1}
fixed_uncertainty2 = [['F', 'f', 'C', 'c', 'F', 'f'], ['F', 'f', 'C', 'c', 'F', 'F'], ['F', 'f', 'C', 'c', 'f', 'F'], ['F', 'f', 'C', 'c', 'f', 'f'], ['F', 'f', 'C', 'c', 'C', 'c']]
for j in range(len(fixed_uncertainty2)):
comb = fixed_uncertainty2[j]
for i in range(len(comb)):
for item in comb:
comb[i] = item_var[item]
comb_value = sum(comb)
comb = []
item_var = {'F': 2, 'f': 1, 'C': -2, 'c': -1}
fixed_uncertainty2 = [['F', 'f', 'C', 'c', 'F', 'f'], ['F', 'f', 'C', 'c', 'F', 'F'], ['F', 'f', 'C', 'c', 'f', 'F'], ['F', 'f', 'C', 'c', 'f', 'f'], ['F', 'f', 'C', 'c', 'C', 'c']]
sub_sums = []
for sublist in fixed_uncertainty2:
values = [item_var[k] for k in sublist]
sub_sums.append(sum(values))
这里有 sub_sums
和
[3, 4, 3, 2, -3]
总和为 sum()
的 sub_sums
这里有一个方法:
item_var = {'F': 2, 'f': 1, 'C': -2, 'c': -1}
fixed_uncertainty2 = [["F", "f", "C", "c", "F", "f"],
["F", "f", "C", "c", "F", "F"],
["F", "f", "C", "c", "f", "F"],
["F", "f", "C", "c", "f", "f"],
["F", "f", "C", "c", "C", "c"]]
comb = sum([item_var[i] for j in fixed_uncertainty2 for i in j])
print(comb)
输出:
9
item_var = {"F": 2, "f": 1, "C": -2, "c": -1}
fixed_uncertainty2 = [
["F", "f", "C", "c", "F", "f"],
["F", "f", "C", "c", "F", "F"],
["F", "f", "C", "c", "f", "F"],
["F", "f", "C", "c", "f", "f"],
["F", "f", "C", "c", "C", "c"],
]
for sub_list in fixed_uncertainty2:
for index, item in enumerate(sub_list[:]):
sub_list[index] = item_var.get(item, item)
此时fixed_uncertainty2
已更改为:
[
[2, 1, -2, -1, 2, 1],
[2, 1, -2, -1, 2, 2],
[2, 1, -2, -1, 1, 2],
[2, 1, -2, -1, 1, 1],
[2, 1, -2, -1, -2, -1],
]
现在分别计算每个子列表的总和:
sum_of_sub_lists = [sum(sub_list) for sub_list in fixed_uncertainty2]
这将为您提供最终输出:
[3, 4, 3, 2, -3]
您混淆了关键字 while
和关键字 for
的用法。
在第二个 while 循环之上移动 i = 0
一行并在末尾添加 j += 1
都可以使您的代码正常工作。但是 pythonic 的方法是使用这样的内置函数:
item_var = {'F': 2, 'f': 1, 'C': -2, 'c': -1}
fixed_uncertainty2 = [['F', 'f', 'C', 'c', 'F', 'f'], ['F', 'f', 'C', 'c', 'F', 'F'], ['F', 'f', 'C', 'c', 'f', 'F'], ['F', 'f', 'C', 'c', 'f', 'f'], ['F', 'f', 'C', 'c', 'C', 'c']]
for sublist in fixed_uncertainty2:
comb_value = sum(map(lambda x: item_var[x], sublist))
print(comb_value)
尝试检查 for 循环和内置函数:
我对其他解决方案的问题是,它们最终会在 Python 级别进行 30 次字典查找以及一个或多个循环。如果我们可以将所有这些字典查找和循环向下推到 'C' 级别会怎样:
from itertools import chain
from operator import itemgetter
item_var = {'F': 2, 'f': 1, 'C': -2, 'c': -1}
fixed_uncertainty = [
['F', 'f', 'C', 'c', 'F', 'f'],
['F', 'f', 'C', 'c', 'F', 'F'],
['F', 'f', 'C', 'c', 'f', 'F'],
['F', 'f', 'C', 'c', 'f', 'f'],
['F', 'f', 'C', 'c', 'C', 'c'],
]
comb = sum(itemgetter(*chain(*fixed_uncertainty))(item_var))
print(comb)
输出
% python3 test.py
9
%
我正在尝试计算 Python 列表列表 (fixed_uncertainty2) 中所有列表的值。
首先,我需要将子列表的每个项目转换为字典分配的值 item_var(例如,将 'F' 转换为 2)。然后我想计算总和(然后将其存储在变量中或打印出来)。我需要为每个子列表执行此操作。所以对于下面的第一个子列表,它将被转换为 [2, 1, -2, -1, 2, 1],所以它的总和(保存为 comb_value)= 3.
使用下面的代码,我只能设法对第一个子列表执行此操作,但它不会将其他子列表中的值转换为数字。有谁知道错误在哪里?
i = 0
j = 0
comb = []
item_var = {'F': 2, 'f': 1, 'C': -2, 'c': -1}
fixed_uncertainty2 = [['F', 'f', 'C', 'c', 'F', 'f'], ['F', 'f', 'C', 'c', 'F', 'F'], ['F', 'f', 'C', 'c', 'f', 'F'], ['F', 'f', 'C', 'c', 'f', 'f'], ['F', 'f', 'C', 'c', 'C', 'c']]
while j in range(len(fixed_uncertainty2)):
comb = fixed_uncertainty2[j]
while i in range(len(comb)):
for item in comb:
comb[i] = item_var[item]
i += 1
comb_value = sum(comb)
错误在第一时间!你没有在每一轮完成后添加到“j”!
comb = []
item_var = {'F': 2, 'f': 1, 'C': -2, 'c': -1}
fixed_uncertainty2 = [['F', 'f', 'C', 'c', 'F', 'f'], ['F', 'f', 'C', 'c', 'F', 'F'], ['F', 'f', 'C', 'c', 'f', 'F'], ['F', 'f', 'C', 'c', 'f', 'f'], ['F', 'f', 'C', 'c', 'C', 'c']]
while j in range(len(fixed_uncertainty2)):
comb = fixed_uncertainty2[j]
while i in range(len(comb)):
for item in comb:
comb[i] = item_var[item]
i += 1
comb_value = sum(comb)
j+=1
顺便说一句,你为什么不使用 for
呢?只是为了避免这些小错误和更清晰的代码:
comb = []
item_var = {'F': 2, 'f': 1, 'C': -2, 'c': -1}
fixed_uncertainty2 = [['F', 'f', 'C', 'c', 'F', 'f'], ['F', 'f', 'C', 'c', 'F', 'F'], ['F', 'f', 'C', 'c', 'f', 'F'], ['F', 'f', 'C', 'c', 'f', 'f'], ['F', 'f', 'C', 'c', 'C', 'c']]
for j in range(len(fixed_uncertainty2)):
comb = fixed_uncertainty2[j]
for i in range(len(comb)):
for item in comb:
comb[i] = item_var[item]
comb_value = sum(comb)
comb = []
item_var = {'F': 2, 'f': 1, 'C': -2, 'c': -1}
fixed_uncertainty2 = [['F', 'f', 'C', 'c', 'F', 'f'], ['F', 'f', 'C', 'c', 'F', 'F'], ['F', 'f', 'C', 'c', 'f', 'F'], ['F', 'f', 'C', 'c', 'f', 'f'], ['F', 'f', 'C', 'c', 'C', 'c']]
sub_sums = []
for sublist in fixed_uncertainty2:
values = [item_var[k] for k in sublist]
sub_sums.append(sum(values))
这里有 sub_sums
和
[3, 4, 3, 2, -3]
总和为 sum()
的 sub_sums
这里有一个方法:
item_var = {'F': 2, 'f': 1, 'C': -2, 'c': -1}
fixed_uncertainty2 = [["F", "f", "C", "c", "F", "f"],
["F", "f", "C", "c", "F", "F"],
["F", "f", "C", "c", "f", "F"],
["F", "f", "C", "c", "f", "f"],
["F", "f", "C", "c", "C", "c"]]
comb = sum([item_var[i] for j in fixed_uncertainty2 for i in j])
print(comb)
输出:
9
item_var = {"F": 2, "f": 1, "C": -2, "c": -1}
fixed_uncertainty2 = [
["F", "f", "C", "c", "F", "f"],
["F", "f", "C", "c", "F", "F"],
["F", "f", "C", "c", "f", "F"],
["F", "f", "C", "c", "f", "f"],
["F", "f", "C", "c", "C", "c"],
]
for sub_list in fixed_uncertainty2:
for index, item in enumerate(sub_list[:]):
sub_list[index] = item_var.get(item, item)
此时fixed_uncertainty2
已更改为:
[
[2, 1, -2, -1, 2, 1],
[2, 1, -2, -1, 2, 2],
[2, 1, -2, -1, 1, 2],
[2, 1, -2, -1, 1, 1],
[2, 1, -2, -1, -2, -1],
]
现在分别计算每个子列表的总和:
sum_of_sub_lists = [sum(sub_list) for sub_list in fixed_uncertainty2]
这将为您提供最终输出:
[3, 4, 3, 2, -3]
您混淆了关键字 while
和关键字 for
的用法。
在第二个 while 循环之上移动 i = 0
一行并在末尾添加 j += 1
都可以使您的代码正常工作。但是 pythonic 的方法是使用这样的内置函数:
item_var = {'F': 2, 'f': 1, 'C': -2, 'c': -1}
fixed_uncertainty2 = [['F', 'f', 'C', 'c', 'F', 'f'], ['F', 'f', 'C', 'c', 'F', 'F'], ['F', 'f', 'C', 'c', 'f', 'F'], ['F', 'f', 'C', 'c', 'f', 'f'], ['F', 'f', 'C', 'c', 'C', 'c']]
for sublist in fixed_uncertainty2:
comb_value = sum(map(lambda x: item_var[x], sublist))
print(comb_value)
尝试检查 for 循环和内置函数:
我对其他解决方案的问题是,它们最终会在 Python 级别进行 30 次字典查找以及一个或多个循环。如果我们可以将所有这些字典查找和循环向下推到 'C' 级别会怎样:
from itertools import chain
from operator import itemgetter
item_var = {'F': 2, 'f': 1, 'C': -2, 'c': -1}
fixed_uncertainty = [
['F', 'f', 'C', 'c', 'F', 'f'],
['F', 'f', 'C', 'c', 'F', 'F'],
['F', 'f', 'C', 'c', 'f', 'F'],
['F', 'f', 'C', 'c', 'f', 'f'],
['F', 'f', 'C', 'c', 'C', 'c'],
]
comb = sum(itemgetter(*chain(*fixed_uncertainty))(item_var))
print(comb)
输出
% python3 test.py
9
%