cuốn sách gpt4 ai đã làm

Python: Nhập danh sách từ tệp văn bản và sắp xếp/trung bình dựa trên nhiều cột

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-04 08:51:46 27 4
mua khóa gpt4 Nike

Tôi có một tệp văn bản trông như thế này:

Mike 5 7 9
Terry 3 7 4
Bước 8 2 3

Tôi đã viết chương trình sau

  • Lấy dữ liệu từ tập tin văn bản
  • Chia văn bản thành các cột cách nhau bằng dấu cách
  • Sắp xếp điểm số sau mỗi tên theo thứ tự (thấp nhất đầu tiên, cao nhất cuối cùng)
  • Tải tên mỗi người và số điểm cao nhất vào danh sách (scoreslist)
  • Sắp xếp danh sách và xuất kết quả theo thứ tự bảng chữ cái
def theo thứ tự bảng chữ cái():
danh sách điểm = []
với open ("classa.txt") là f:
nội dung = f.read().splitlines()
cho dòng trong nội dung:
đường chia = line.split("")
tên = đường phân chia[0]
điểm = đường phân chia[1:]
điểm cao = đã sắp xếp(điểm)[-1]
Scorelist.append("{} {}".format(name,highscore))

danh sách điểm.sort(key=lambda x: x[0])
in (danh sách điểm)

Đầu ra cuối cùng trông như thế này:

Mike 9
bước 8
Terry 7

Tôi hài lòng với chức năng hiện tại nhưng tôi cảm thấy nó có thể sạch sẽ hơn một chút. Có cách nào dễ dàng hơn?

Quan trọng hơn, tôi muốn lấy tệp gốc và sử dụng phương pháp tương tự để tạo giá trị trung bình của các số trong tệp văn bản gốc và xuất ra ở cùng định dạng. Tôi nghĩ có thể có một hàm tính trung bình đơn giản mà tôi có thể sử dụng, nhưng điều này dường như không xảy ra:

điểm = chia dòng.avg[-1:-3]

câu trả lời hay nhất

Bạn có thể sử dụng thống kê.meanTính trung bình của bạn,csv lib phân tích tệp thành dòng, bạn không bao giờ cần gọi read Trừ khi bạn thực sự muốn một chuỗi chứa tất cả nội dung tệp, bạn có thể lặp lại một đối tượng tệp và chia từng dòng.

từ số liệu thống kê nhập có nghĩa là
import csv

def Sort_mean(fle):
với open(fle) là f:
đối với tên, *điểm trong csv.reader(f, delimiter=" "):
srt = đã sắp xếp(map(int, điểm))
print("Điểm cao nhất cho {} là {}".format(name, srt[-1]))
print("Điểm trung bình của {} là {}".format(name,mean(srt)))

Đối với tệp đầu vào của bạn, nó sẽ xuất ra:

Điểm cao nhất của Mike là 9
Điểm trung bình của Mike là 7,0
Điểm cao nhất của Terry là 7
Điểm trung bình của Terry là 4.666666666666667
Điểm cao nhất ở Ste là 8
Điểm trung bình của Ste là 4.3333333333333333

Bây giờ nếu bạn muốn lưu trữ tất cả dữ liệu và xuất dữ liệu theo thứ tự:

từ số liệu thống kê nhập có nghĩa là
import csv
từ toán tử nhập itemgetter


def Sort_mean(fle):
trung bình, cao = [], []
với open(fle) là f:
đối với tên, *điểm trong csv.reader(f, delimiter=" "):
srt = danh sách (bản đồ (int, điểm))
avgs.append((tên, ý nghĩa(srt)))
high.append((name, max(srt)))
avgs.sort(key=itemgetter(1), Reverse=1)
high.sort(key=itemgetter(1), Reverse=1)
trả về mức trung bình, cao

Điều này sẽ cung cấp cho bạn hai danh sách được sắp xếp từ cao đến thấp:

Trong [10]: cao, avgs = Sort_mean("in.txt")

Trong [11]: cao
Ra[11]: [('Mike', 7.0), ('Terry', 4.666666666666667), ('Ste', 4.333333333333333)]

Trong [12]: trung bình
Ra[12]: [('Mike', 9), ('Ste', 8), ('Terry', 7)]

Đối với python2, bạn cần tự tính toán mức trung bình và logic của vòng lặp hơi khác một chút:

def Sort_mean(fle):
trung bình, cao = [], []
với open(fle) là f:
cho hàng trong csv.reader(f, delimiter=" "):
tên, điểm = hàng[0], hàng[1:]
srt = bản đồ(int, điểm số)
avgs.append((name, sum(srt,0.0) / len(srt)))
high.append((name, max(srt)))
avgs.sort(key=itemgetter(1), Reverse=1)
high.sort(key=itemgetter(1), Reverse=1)
trả về mức trung bình, cao

Thay vì hai danh sách, bạn có thể lưu trữ từ điển có điểm cao nhất của người dùng và sắp xếp các mục được lưu trữ trong đó.

Về chức năng của riêng bạn, bạn có thể viết lại nó như sau:

def theo thứ tự bảng chữ cái():
danh sách điểm = []
với open ("classa.txt") là f:
# chỉ lặp lại đối tượng file
# từng dòng một
cho dòng trong f:
# không cần vượt qua dấu phân cách
chia_line = line.split()
tên = chia_line[0]
điểm = chia_line[1:]
# sử dụng max để lấy điểm cao và sử dụng int làm khóa
# hoặc "123" < "2"
high_score = max(score,key=int)
Score_list.append("{} {}".format(name,high_score))
# không cần lambda để sắp xếp theo thứ tự abc
điểm_list.sort()
in(điểm_list)

Về Python: Nhập danh sách từ tệp văn bản và sắp xếp/tính trung bình dựa trên nhiều cột, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/34570067/

27 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress