簡體   English   中英

從列表中查找總和和平均值?

[英]Find sum and average from list?

1)從 1 開始並包含字母 M 的那些行中的所有第 3 個元素的總和,對於 507 等也是如此。
2)從從 1 開始並包含字母 W 的那些行中的所有第 3 個元素中找到最小和最大數字,對於 507 等等。從這個列表

rows = [['507', 'W', '1000', '1'],
['1', 'M', '6', '2'],
['1', 'W', '1400', '3'],
['1', 'M', '8', '8'],
['1', 'T', '101', '10'],
['507', 'M', '4', '12'],
['1', 'W', '1700', '15'],
['1', 'M', '7', '16'],
['507', 'M', '8', '20']]

預期輸出:格式為 (id, min number, max number, sum of number) for id

1 1400 1700 27 507 1000 1000 12

我的代碼

    import itertools


lst = []
fileToProcess = open("/home/salman/Desktop/input.txt", "r")
for line in fileToProcess:
    lst.append(line.strip().split(' '))
lst = sorted(lst, key=lambda x: x[0])
groups = itertools.groupby(lst, key=lambda x: x[0])
groups = [[*group] for _, group in groups]

# 3rd element
grp_3rd = [[entry[2] for entry in group] for group in groups]


grp_3rd = [sum(float(entry[2]) for entry in group) for group in groups]


grp_3rd = {group[0][0]: sum(float(entry[2]) for entry in group) for group in groups}
print(grp_3rd)
flatten = lambda list_: [sublist for l in list_ for sublist in l]
groups = [flatten(group) for group in groups]

print(groups)

您的代碼沒有意義,但根據您最初的問題陳述,請嘗試以下操作:

rows = [['507', 'W', '1000', '1'],
['1', 'M', '6', '2'],
['1', 'W', '1400', '3'],
['1', 'M', '8', '8'],
['1', 'T', '101', '10'],
['507', 'M', '4', '12'],
['1', 'W', '1700', '15'],
['1', 'M', '7', '16'],
['507', 'M', '8', '20']]
dd = {}
for row in rows:
    key = "{}_{}".format(row[0],row[1])
    if key in dd:
        dd[key]["col_3"].append(int(row[2]))
        dd[key]["col_4"].append(int(row[3]))
    else:
        dd.update({key: {"col_3":[int(row[2])],"col_4":[int(row[3])]}})

for key, value in dd.items():
    print("id: {}, min number: {},max number: {},sum of numbers: {}".format(key,min(value['col_3']),max(value['col_3']),sum(value['col_4'])))

輸出

id: 507_W, min number: 1000,max number: 1000,sum of numbers: 1
id: 1_M, min number: 6,max number: 8,sum of numbers: 26
id: 1_W, min number: 1400,max number: 1700,sum of numbers: 18
id: 1_T, min number: 101,max number: 101,sum of numbers: 10
id: 507_M, min number: 4,max number: 8,sum of numbers: 32

我剛找到 21 而不是 27 檢查它是否正確

rows = [['507', 'W', '1000', '1'],
['1', 'M', '6', '2'],
['1', 'W', '1400', '3'],
['1', 'M', '8', '8'],
['1', 'T', '101', '10'],
['507', 'M', '4', '12'],
['1', 'W', '1700', '15'],
['1', 'M', '7', '16'],
['507', 'M', '8', '20']]

sum_1_M=0
sum_1_W=0
sum_507_M=0
sum_507_W=0
list_1=[]
list_507=[]
for x in rows:
    if x[0]== '1' and x[1]=='M' :
        sum_1_M += int(x[2])
    elif  x[0]== '1' and x[1]=='W':
           sum_1_W += int(x[2])
           list_1.append(int(x[2]))
    elif  x[0]== '507' and x[1]=='M':
        sum_507_M += int(x[2])
    elif  x[0]== '507' and x[1]=='W':
           sum_507_W += int(x[2])
           list_507.append(int(x[2]))

list_1.sort()
list_507.sort()
print('{} {} {} {}'.format('1',list_1[0],list_1[len(list_1)-1],sum_1_M))
print('{} {} {} {}'.format('507',list_507[0],list_507[len(list_507)-1],sum_507_M))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM