a_list=[['黑色',110], ['白色',120],['黑色',113],['红色', 121],['白色',111],['白色',102]]
有什么办法可以把结果变成:
[
['黑色',110]
['黑色',113]
['黑色',平均值]
['白色',120]
['白色',111]
['白色',102]
['白色',平均值]
['红色',121]
['红色',平均值]
]
结果列表的颜色是原列表中出现的顺序,不是sort()排序的结果
第一步,从原列表中遍历出不同的颜色,放在一个临时列表中b_list
第二步,用一个双重循环,遍历原列表,同时计算各颜色的总和及个数;逐个放入result列表,外层循环的最后放入平均值。就ok了
a_list=[['黑色',110], ['白色',120],['黑色',113],['红色', 121],['白色',111],['白色',102]]
b_list = []
for a in a_list:
if a[0] not in b_list:
b_list.append(a[0])
result = []
for color in b_list:
count, total = 0, 0
for a in a_list:
if a[0]==color:
count += 1
total += a[1]
result.append([color,a[1]])
result.append([color,total/count])
print(result)
输出结果:
[['黑色', 110], ['黑色', 113], ['黑色', 111.5], ['白色', 120], ['白色', 111], ['白色', 102], ['白色', 111.0], ['红色', 121], ['红色', 121.0]]
a_list=[['黑色',110], ['白色',120],['黑色',113],['红色', 121],['白色',111],['白色',102]]
# https://blog.csdn.net/weixin_42782150/article/details/110471428
# a_list = sorted(a_list,reverse = True)
#print(a_list)
nextcolor=a_list[0][0]
b_list=[]
length=0
# 按顺序将相同元素逐个添加到列表b_list
while length<len(a_list): # 将列表a_list的元素全部按相同顺序添加到b_list
nextfind=0 # 下一个颜色是否找到的标记
color=nextcolor
for item in a_list: # 遍历a_list
# 如果当前元素和前一个元素的颜色相同
# 则将当前元素添加到b_list
if color == item[0]:
b_list.append(item)
length=length+1 # 添加了的元素计数器+1
# print("in if,length=",length,",item=",item,",b_list=",b_list)
else: # 如果和前一个元素的颜色不同
if nextfind==0 : # 并且下一个颜色还未找到
nextcolor=item[0]
find=0
# 则遍历已经添加的元素列表
# 寻找当前的元素颜色是否存在于b_list
for item2 in b_list:
if nextcolor == item2[0]:
find=1
break
# 如果不存在,则下一个颜色为当前元素颜色
if find==0:
nextfind=1
nextcolor=item[0]
# print("in find if ,nextcolor=",nextcolor)
#print(b_list)
# 将按顺序排列后的列表赋值给a_list
a_list=b_list
#print(a_list)
num=0
avg=0
color=a_list[0][0]
result = []
# https://blog.csdn.net/nongcunqq/article/details/116291267
for index,item in enumerate(a_list): # 遍历列表
# 如果当前元素和前一个元素颜色相同
# 则将其添加到结果列表
if color == item[0]:
result.append(item)
avg = avg + item[1] # 将当前颜色对应的数值添加到avg变量
num=num+1 # 相同计数器+1
# 如果 此元素为数组最后一个元素
# 则将此元素的平均值结果添加到结果列表
if index == (len(a_list)-1):
avg = avg/num
result.append([color,avg])
# print("in if, item=",item,",color=",color,',num=',num,",result=",result)
else: # 如果当前元素和前一个元素颜色不同
avg = avg/num # 则计算前一个元素的平均值
result.append([color,avg]) # 将前一个元素的平均值结果添加到结果列表
# print("in else, item=",item,",color=",color,',num=',num,",result=",result)
color=item[0] # 前一个颜色赋值为当前元素的颜色
num=1 # 相同计算器赋值为1
avg=item[1] # 当前颜色平均值赋值为当前元素的值
result.append(item) # 将当前元素添加到 结果列表
# 如果当前元素为列表最后一个元素
# 则将当前元素的平均值结果添加到结果列表
if index == (len(a_list)-1):
result.append([color,avg])
for item in result:
print(item)
对于这个问题,我们可以按照以下步骤来解决:
sorted()
函数对列表a_list进行排序,排序的依据是列表元素的第一个值(颜色)。sorted_list = sorted(a_list, key=lambda x: x[0])
color_dict = {}
for item in sorted_list:
color = item[0]
value = item[1]
if color not in color_dict:
color_dict[color] = [value, 1]
else:
color_dict[color][0] += value
color_dict[color][1] += 1
result = []
for color, value in color_dict.items():
average = value[0] / value[1]
result.append([color, value[0]])
result.append([color, average])
for item in result:
print(item)
完整的代码如下所示:
a_list=[['黑色',110], ['白色',120],['黑色',113],['红色', 121],['白色',111],['白色',102]]
sorted_list = sorted(a_list, key=lambda x: x[0])
color_dict = {}
for item in sorted_list:
color = item[0]
value = item[1]
if color not in color_dict:
color_dict[color] = [value, 1]
else:
color_dict[color][0] += value
color_dict[color][1] += 1
result = []
for color, value in color_dict.items():
average = value[0] / value[1]
result.append([color, value[0]])
result.append([color, average])
for item in result:
print(item)
运行这段代码后,你将会得到以下输出结果:
['黑色', 223]
['黑色', 111.5]
['白色', 333]
['白色', 105.75]
['红色', 121]
['红色', 121.0]
其中,每个子列表的第一个元素是颜色,第二个元素是对应颜色的总和或平均值。
以下内容引用自GPT,有用望采纳:
你可以使用Python编程来实现将列表中相同颜色的值进行处理,并计算平均值后生成新的列表。下面是一个示例代码:
from collections import defaultdict
a_list = [['黑色', 110], ['白色', 120], ['黑色', 113], ['红色', 121], ['白色', 111], ['白色', 102]]
# 使用字典来存储每种颜色的值和计数
color_dict = defaultdict(list)
# 将原始列表中的值按颜色分类存储
for color, value in a_list:
color_dict[color].append(value)
# 生成处理后的新列表
new_list = []
# 对每种颜色的值进行处理
for color, values in color_dict.items():
# 对值进行求和并计算平均值
total = sum(values)
average = total / len(values)
# 将原始值添加到新列表
for value in values:
new_list.append([color, value])
# 添加平均值到新列表
new_list.append([color, average])
# 打印结果
for item in new_list:
print(item)
在以上示例代码中,我们使用defaultdict
来创建一个字典color_dict
,其中每个键对应一个颜色,在每个键的值中存储对应的值。然后,我们通过遍历color_dict
来生成新的列表new_list
,其中包含原始值和平均值。
最后,我们使用循环打印new_list
中的每个元素。
运行以上代码将得到期望的输出结果。
添加平均值代码不是很理想
from collections import defaultdict
a_list = [['黑色', 110], ['白色', 120], ['黑色', 113], ['红色', 121], ['白色', 111], ['白色', 102]]
color_list = ['黑色', '白色', '红色']
# 按照 color_list 的顺序对 a_list 进行排序
a_list.sort(key=lambda x: color_list.index(x[0]))
# 使用字典保存每个颜色的总和和计数
color_data = defaultdict(lambda: {'sum': 0, 'count': 0})
for color, value in a_list:
color_data[color]['sum'] += value
color_data[color]['count'] += 1
# 添加平均值到列表
index = 0
start = 0
for color in color_list:
avg = color_data[color]['sum']/color_data[color]['count']
index = color_data[color]['count'] + start
a_list.insert(index,[color,avg])
start = index+1
print(a_list)
可以使用 Python 中的字典来实现这个功能。具体来说,你可以使用一个字典来存储每种颜色的所有值,并计算它们的平均值。然后,你可以将每个颜色的名称和平均值添加到一个新的列表中,最后将每个颜色的原始值和平均值添加到该列表中。
以下是一个实现该功能的示例代码:
python
Copy
from collections import defaultdict
a_list = [['黑色',110], ['白色',120],['黑色',113],['红色', 121],['白色',111],['白色',102]]
# 使用 defaultdict 初始化一个字典,用于存储每个颜色的所有值
color_dict = defaultdict(list)
for color, value in a_list:
color_dict[color].append(value)
result_list = []
for color in color_dict:
# 计算每个颜色的平均值
avg_value = sum(color_dict[color]) / len(color_dict[color])
# 将每个颜色的名称和平均值添加到结果列表中
result_list.append([color, avg_value])
# 将每个颜色的原始值和平均值添加到结果列表中
for value in color_dict[color]:
result_list.append([color, value])
# 将每个颜色的平均值添加到结果列表中
result_list.append([color, avg_value])
print(result_list)
在这个代码中,我们首先使用 defaultdict 初始化一个字典 color_dict,用于存储每个颜色的所有值。然后,我们遍历原始列表 a_list,将每个颜色的值添加到 color_dict 中。
接下来,我们遍历 color_dict 中的每个颜色,计算它们的平均值并将它们添加到结果列表 result_list 中。然后,我们将每个颜色的原始值和平均值添加到 result_list 中,以获得最终的结果。
对于你提供的示例输入,上述代码将输出以下结果:
json
Copy
[['黑色', 111.5],
['黑色', 110],
['黑色', 113],
['黑色', 111.5],
['白色', 111.0],
['白色', 120],
['白色', 111],
['白色', 102],
['白色', 111.0],
['白色', 111.0],
['红色', 121],
['红色', 121.0]]