Bỏ qua nội dung
Hướng dẫn Varlig
Trang chủ Varlig

Danh sách và thống kê

Một danh sách giữ một số giá trị cùng nhau dưới một tên, chẳng hạn như số bước một tuần, một bộ điểm thi hoặc biên lai một tháng. Khi các giá trị nằm trong danh sách, bạn có thể tổng hợp chúng, tính trung bình chúng, đo mức độ trải rộng của chúng và chọn ra những giá trị quan trọng.

Trang này hướng dẫn viết và truy cập danh sách bằng chỉ số, các thống kê tóm tắt, cộng các dòng bên trên, gắn thẻ để tính tổng các dòng dù chúng nằm ở đâu, sắp xếp và lấy một phần danh sách, biến đổi danh sách bằng map và filter, cùng các phép toán trên toàn bộ danh sách. Hãy dùng khi bạn có một cột số liệu cần tổng hợp. Danh sách gồm các hàng cũng có thể dùng làm ma trận, được giải thích ở trang riêng.

Viết một danh sách

Đặt các giá trị trong dấu ngoặc vuông, cách nhau bằng dấu phẩy:

calc
scores = [72, 85, 91, 64, 88] cho kết quả [72, 85, 91, 64, 88]
scores[0] cho kết quả 72
scores[4] cho kết quả 88
length(scores) cho kết quả 5

Vị trí của một giá trị trong danh sách là chỉ số, viết trong ngoặc vuông sau danh sách. Chỉ số bắt đầu từ không, nên scores[0] là điểm thứ nhất và scores[4] là điểm thứ năm. Phần tử cuối luôn nằm ở length(scores) - 1. Chỉ số âm, không nguyên hoặc quá lớn sẽ gây lỗi; không thể dùng chỉ số âm để đếm ngược từ cuối.

Các yếu tố có thể là tính toán, số lượng với các đơn vị hoặc các danh sách khác:

calc
[2 * 45, 60 + 15] cho kết quả [90, 75]
[1.5 kg, 750 g] cho kết quả [1.5 kg, 750 g]
[[1, 2], [3, 4]][1][0] cho kết quả 3

Với các danh sách lồng nhau, chỉ mục đầu tiên chọn danh sách bên trong và chỉ mục thứ hai chọn một giá trị từ đó: [1] chọn [3, 4], sau đó [0] chọn 3.

Dấu phân cách hàng nghìn dùng được trong danh sách, nên bạn có thể dán số liệu đúng như cách chúng được viết. Đặt khoảng trắng sau dấu phẩy ngăn cách các giá trị; dấu phẩy theo ngay sau bởi ba chữ số sẽ được giữ là một phần của số:

calc
salaries = [£32,000, £41,500, £38,250] cho kết quả [£32,000.00, £41,500.00, £38,250.00]
average(salaries) cho kết quả £37,250.00

Một vài điều cần chú ý:

  • Khi không có khoảng trắng, mỗi dấu phẩy đều ngăn cách các phần tử, nên [8200,10400] có hai giá trị. Danh sách như [100,200,300] có thể được hiểu là một số hoặc ba số; vì vậy Varlig báo lỗi và nêu rõ cả hai cách hiểu.
  • Kết quả hiển thị dấu phân cách hàng nghìn và khoảng trắng sau dấu phẩy ngăn cách phần tử, nên [8,200, 10,400] là danh sách có hai giá trị.
  • Một danh sách chứa tối đa 1.024 giá trị.

Thống kê tóm tắt

calc
scores = [72, 85, 91, 64, 88]
sum(scores) cho kết quả 400
average(scores) cho kết quả 80
median(scores) cho kết quả 85
min(scores) cho kết quả 64
max(scores) cho kết quả 91
count(scores) cho kết quả 5

mean và avg là tên khác của average, total là tên khác của sum, stdev của stddev, và count của length, nên bạn có thể dùng các tên quen thuộc từ bảng tính. product nhân các giá trị với nhau. Để tìm giá trị xuất hiện nhiều nhất, phân vị hoặc tứ phân vị, xem bên dưới.

Với một danh sách được đặt tên, bạn cũng có thể viết số liệu thống kê bằng từ:

calc
scores = [72, 85, 91, 64, 88]
average of scores cho kết quả 80
total of scores cho kết quả 400

sum of, mean of, median of, min of, max of và count of hoạt động tương tự. Sau of, viết tên đã định nghĩa hoặc trực tiếp các giá trị ngăn cách bằng dấu phẩy, có hoặc không có ngoặc tròn. Với các giá trị trong ngoặc vuông, hãy dùng dạng gọi hàm, như average([72, 85, 91]).

Hầu hết các số liệu thống kê, bao gồm sum, product, average, median, min, max, count và stddev, cũng chấp nhận các giá trị riêng biệt thay vì danh sách:

calc
max(72, 85, 91) cho kết quả 91
sum(1, 2, 3, 4) cho kết quả 10
average of 70, 85, 91 cho kết quả 82
mean of (1,2,3) cho kết quả 2
average(1,200, 1,800) cho kết quả 1,500

Cộng các dòng bên trên

Một dòng chỉ có sum, total, subtotal, grand total, average, max hoặc min sẽ tính thống kê tương ứng cho các kết quả phía trên. Phạm vi là phần hiện tại, bắt đầu sau tổng trước đó, đường phân cách --- hoặc tiêu đề #, nên mỗi phần của ghi chú có kết quả riêng khi bạn nhập. Cách này hoạt động như tùy chọn Subtotal trong menu ngữ cảnh của dòng:

calc
# Groceries
bread = £1.20
milk = £1.45
eggs = £2.30
total cho kết quả £4.95
# Household
bin bags = £3.50
washing up liquid = £1.80
total cho kết quả £5.30

Từ có thể mang nhãn, lấy tên riêng, chuyển đổi câu trả lời hoặc có nhận xét sau nó, vì vậy dòng đọc giống như phần còn lại của ghi chú của bạn:

calc
tickets = £64
train = £41.20
Estimated total: total cho kết quả £105.20

est = total lưu kết quả dưới một tên; total // still to book thêm chú thích bên cạnh. total in kg đổi đơn vị trước khi hiển thị, hữu ích khi một phần có cả gam và kilôgam. Từ thống kê nằm cạnh toán tử mang cùng giá trị như khi đứng trên dòng riêng, nên £5 + subtotal cộng thêm năm bảng vào tổng hiện tại.

calc
# Parcels
12 kg cho kết quả 12 kg
4 kg cho kết quả 4 kg
850 g cho kết quả 850 g
total in kg cho kết quả 16.85 kg
max cho kết quả 12 kg

Nếu bạn đã cung cấp một giá trị cho tên sum hoặc total, dòng sẽ hiển thị giá trị của bạn thay vì. Khi không có gì ở trên để làm việc, dòng sẽ ghi Unsupported: no amounts above to add up thay vì hiển thị một khoảng trống hoặc số không, điều này thường có nghĩa là một tiêu đề mà bạn đã quên là có.

Mỗi số tiền được tính một lần. Khi một dòng sau trong phần làm việc gì đó từ một số tiền được đặt tên, tổng số sẽ tính dòng đó thay vì cả hai, vì vậy danh sách mua sắm đơn giá và số lượng cộng với số tiền bạn thực sự sẽ phải trả:

calc
shirt = £18.50
shorts = £9
9 * shirt cho kết quả £166.50
10 * shorts cho kết quả £90.00
fee = £40
vat = fee * 20% cho kết quả £8.00
total cho kết quả £304.50

shirt và shorts được tính bên trong hai dòng sử dụng chúng, trong khi fee vẫn nằm trong tổng số vì vat chỉ chiếm một phần của nó.

Quy tắc này theo dõi toàn bộ chuỗi tên. Nếu ghi chú chia một số tiền thành nhiều phần rồi cộng các phần lại, dòng cộng được tính vào tổng, và số tiền gốc đã được chia cũng được tính:

calc
pot = £900
1st = 50% of pot cho kết quả £450.00
2nd = 30% of pot cho kết quả £270.00
3rd = 20% of pot cho kết quả £180.00
1st + 2nd + 3rd cho kết quả £900.00
total cho kết quả £900.00

Chỉ các đại lượng cùng loại được cộng. Khi phía trên có tiền hoặc đại lượng kèm đơn vị, các phần trăm, tỷ lệ, số đếm không kèm đơn vị và dòng báo lỗi đều bị bỏ qua. Các số không kèm đơn vị được dán thành cột sẽ được cộng nếu có số chữ số thập phân như tiền tệ; số có nhiều chữ số thập phân hơn, chẳng hạn tỷ giá hoặc hệ số, sẽ bị bỏ qua. Chú giải của tổng liệt kê mọi dòng đã bỏ qua, ví dụ dòng 3 với people = 2 hoặc dòng 2 báo lỗi, để bạn biết ngay tổng bao gồm những gì.

Một danh sách gồm hai hoặc nhiều số tiền được viết không có tên, ngay phía trên tổng số và bên dưới một dòng được tạo ra từ tên, được tự thêm vào. Bằng cách đó, ngân sách được tính ở đầu ghi chú sẽ không được tính lại trong danh sách bên dưới:

calc
budget = £18,000
remaining = budget - £6,388.25 cho kết quả £11,611.75
- skip hire £250 cho kết quả £250.00
- deep clean £120 cho kết quả £120.00
subtotal cho kết quả £370.00

Để có tổng số dòng không cạnh nhau, hãy gắn nhãn chúng bằng tag thay thế.

Các giá trị phổ biến nhất

mode trả về giá trị xuất hiện nhiều hơn mọi giá trị khác; modes trả về danh sách mọi giá trị cùng có tần suất xuất hiện cao nhất:

calc
marks = [3, 4, 4, 5, 5, 5, 6]
mode(marks) cho kết quả 5
modes([1, 1, 2, 2, 3]) cho kết quả [1, 2]

mode chỉ trả về kết quả khi có duy nhất một giá trị xuất hiện nhiều nhất. Nếu không có giá trị lặp lại hoặc nhiều giá trị đồng hạng, hàm sẽ thông báo thay vì chọn tùy ý:

calc
mode([1, 2, 3]) cho kết quả Unsupported: No value repeats, so this list has no mode; use median or average instead

Phân vị và tứ phân vị

percentile(list, rank) lấy thứ hạng từ 0 đến 100 và đưa ra giá trị tại thời điểm đó, nội suy giữa hai quan sát gần nhất. quartile(list, k) là điều tương tự ở các phần tư, với k từ 0 đến 4, vì vậy quartile(list, 1) là percentile(list, 25):

calc
scores = [72, 85, 91, 64, 88]
percentile(scores, 50) cho kết quả 85
percentile(scores, 25) cho kết quả 72
quartile(scores, 3) cho kết quả 88
quartile(scores, 4) cho kết quả 91
percentile([1, 2, 3, 4], 25) cho kết quả 1.75
quartile([1, 2, 3, 4], 3) cho kết quả 3.25

Phân vị thứ 50 là giá trị trung vị, và thứ 0 và thứ 100 - quartile(list, 0) và quartile(list, 4) - là các giá trị nhỏ nhất và lớn nhất, giống như min và max. Một thứ hạng nằm ngoài phạm vi của nó là một lỗi chứ không phải là giá trị gần nhất phù hợp:

calc
percentile([1, 2, 3, 4], 101) cho kết quả Unsupported: A percentile is between 0 and 100
quartile([1, 2, 3, 4], 5) cho kết quả Unsupported: A quartile is 0, 1, 2, 3 or 4

Độ phân tán: phương sai và độ lệch chuẩn

calc
scores = [72, 85, 91, 64, 88]
variance(scores) cho kết quả 132.5
stddev(scores) to 1 dp cho kết quả 11.5

Cả hai đều là thống kê mẫu: chúng được chia cho một số ít hơn số lượng giá trị (n - 1), đây là lựa chọn thông thường khi các số liệu của bạn là mẫu từ một thứ gì đó lớn hơn. Chúng cần ít nhất hai giá trị. Thêm to 1 dp sau bất kỳ thống kê nào để làm tròn.

Khi danh sách là toàn bộ tổng thể thay vì một mẫu, hãy dùng các hàm dành cho tổng thể: chúng chia cho n và chỉ cần một giá trị:

calc
# Train delays in minutes
delays = [2, 4, 4, 4, 5, 5, 7, 9]
sample_variance(delays) cho kết quả 4.5714285714
population_variance(delays) cho kết quả 4
sample_stddev(delays) cho kết quả 2.1380899353
population_stddev(delays) cho kết quả 2
Lời gọi hàm Chia các chênh lệch bình phương cho Yêu cầu
variance, sample_variance n - 1 Hai giá trị
population_variance n Một giá trị
stddev, stdev, sample_stddev n - 1 Hai giá trị
population_stddev n Một giá trị

sample_variance và sample_stddev là những cái tên dài hơn cho variance và stddev, vì vậy bạn có thể đánh vần cái nào bạn muốn nói. Các tên ngắn luôn là các hình thức mẫu và vẫn như vậy.

Danh sách với các đơn vị

sum, average, median, mode, modes, percentile, quartile, min, max, stddev và population_stddev giữ các đơn vị và chuyển đổi giữa các đơn vị tương thích. Các giá trị được đọc trong đơn vị đầu tiên và câu trả lời quay trở lại trong đó:

calc
commutes = [24 min, 31 min, 27 min, 22 min]
sum(commutes) cho kết quả 1 hour 44 min
average(commutes) cho kết quả 26 min
median(commutes) cho kết quả 25.5 min
percentile(commutes, 25) cho kết quả 23.5 min
population_stddev(commutes) cho kết quả 3.3911649916 min
sum([1 kg, 500 g]) cho kết quả 1.5 kg
modes([1 kg, 500 g, 1 kg, 500 g]) cho kết quả [0.5 kg, 1 kg]

Phương sai là ngoại lệ: chúng bình phương các quan sát của chúng và không có đơn vị nào tồn tại được điều đó, vì vậy chúng chỉ lấy các số đơn giản.

calc
sample_variance([1 kg, 2 kg]) cho kết quả Unsupported: A variance squares its observations, so it takes plain numbers; use stddev for amounts with a unit

sort cũng chỉ hoạt động trên các số đơn giản. Một thống kê về các giá trị có đơn vị không tương thích, chẳng hạn như sum([1 kg, 3 m]), đưa ra lỗi thay vì lặng lẽ bỏ qua các giá trị.

Các quy tắc về độ chính xác được giải thích trong Những điều bộ máy tính toán bảo đảm.

Danh sách trống

Gọi vào một danh sách trống Kết quả
sum([]) 0
product([]) 1
count([]), length([]) 0
average([]), median([]), min([]), max([]) Lỗi
variance([]), stddev([]) Lỗi

Một danh sách trống thường xuất hiện dưới dạng kết quả của một phép filter không khớp với bất kỳ giá trị nào, vì vậy average của một danh sách đã được lọc có thể thất bại ngay cả khi danh sách gốc có các giá trị.

Thẻ

Thẻ là một # với một từ được nối trực tiếp vào nó, chẳng hạn như #food. Viết một cái ở bất cứ đâu trên một dòng để dán nhãn dòng đó. Thẻ không chiếm một phần trong tổng, vì vậy dòng vẫn hiển thị câu trả lời của riêng nó và nó nhóm dòng đó với mọi dòng khác mang cùng một thẻ. total of #food sau đó thêm các dòng đó lên:

calc
£12.50 lunch #food cho kết quả £12.50
£8 coffee #food cho kết quả £8.00
flights = £420 #trip cho kết quả £420.00
total of #food cho kết quả £20.50

Đó là những gì một thẻ cung cấp cho bạn mà tổng phụ không thể: các dòng không phải ngồi cạnh nhau. Một tuần chi tiêu, một chuyến đi và một danh sách mua sắm có thể chia sẻ một khối, mỗi khối có con số riêng ở phía dưới. Giữ con trỏ trên một thẻ để xem nó cộng lại những gì cho đến nay.

Mọi thống kê đều hoạt động trên một thẻ. of là tùy chọn, thẻ có thể đứng trước hoặc sau từ và câu trả lời có nhãn hoặc tên riêng của nó, như bất kỳ dòng nào khác:

calc
#food £12.50
#food £8
£420 #trip
total of #food cho kết quả £20.50
average of #food cho kết quả £10.25
count of #food cho kết quả 2
min of #food cho kết quả £8.00
max of #food cho kết quả £12.50
#food total cho kết quả £20.50
Food this week: sum of #food cho kết quả £20.50
eaten = avg #food cho kết quả £10.25

sum, total, average, avg, mean, count, min và max đều được đọc theo cách này.

Một số liệu thống kê thẻ đứng ở vị trí của một số tiền, vì vậy một phép tính có thể được thực hiện từ nó. Đó là cách bạn lấy một khoản tiền gửi ra khỏi tổng số đang chạy, mở rộng một lần hoặc đặt hai thẻ so với nhau:

calc
£20 shop #food cho kết quả £20.00
£30 meal out #food cho kết quả £30.00
total of #food - £10 cho kết quả £40.00
2 * total of #food cho kết quả £100.00
Cooking kit: total of #food cho kết quả £50.00

Một dòng có thể mang bao nhiêu thẻ tùy ý, và mỗi thẻ đều tính dòng đó. Nêu hai thẻ trong cùng cụm để lấy những dòng có cả hai:

calc
£50 dinner #trip #food cho kết quả £50.00
£30 taxi #trip cho kết quả £30.00
£9 sandwich #food cho kết quả £9.00
total of #trip cho kết quả £80.00
total of #food cho kết quả £59.00
total of #trip #food cho kết quả £50.00

Phạm vi của tổng theo thẻ

Một cụm từ thẻ nhìn qua chính xác các dòng giống như một total đơn giản và tuân theo các quy tắc tương tự:

  • Nó bao gồm phần riêng của nó, trở lại tổng số trước đó, một dải phân cách --- hoặc một tiêu đề #.
  • Nó chỉ thêm số tiền tương tự. Tỷ lệ phần trăm, tỷ lệ, số lượng đơn giản và các dòng có lỗi bị bỏ qua và gợi ý đặt tên cho chúng, chẳng hạn như "Bỏ đi dòng 2 (người = 2)".
  • Mỗi số tiền được tính một lần, vì vậy giá được gắn thẻ mà một dòng được gắn thẻ sau đó nhân lên được tính trong dòng đó thay vì cả hai.

Vì vậy, một tiêu đề là tất cả những gì cần thiết để giữ cho #food của một tuần tách biệt với tuần tiếp theo:

calc
# Week 1
£20 lunch #food cho kết quả £20.00
total of #food cho kết quả £20.00
# Week 2
£30 lunch #food cho kết quả £30.00
total of #food cho kết quả £30.00

Khi không có gì để thêm vào, dòng nói như vậy thay vì hiển thị khoảng trống hoặc số không, điều này thường có nghĩa là một lỗi đánh máy trong thẻ hoặc tiêu đề bạn đã quên ở đó:

calc
£12.50 lunch #food cho kết quả £12.50
total of #drinks cho kết quả Unsupported: no lines tagged #drinks above
ring the plumber #jobs
total of #jobs cho kết quả Unsupported: no amounts tagged #jobs above

Viết tên thẻ

Tên thẻ có thể chứa các chữ cái, chữ số, _, - và /, vì vậy #q1-2026 và #trip/lisbon là một tên. Chữ viết hoa không tạo ra sự khác biệt:

calc
£20 flight #trip/lisbon cho kết quả £20.00
£35 hotel #Trip/Lisbon cho kết quả £35.00
total of #trip/lisbon cho kết quả £55.00

Một # không được nối với một từ vẫn giữ được ý nghĩa cũ của nó, vì vậy không có gì bạn đã viết thay đổi:

Bạn viết Nó là gì
# Weekly shop Chú thích, vì có khoảng trắng sau dấu thăng
5 + 5 # comment Tương tự: bỏ qua mọi thứ sau dấu thăng
C#4 in Hz Dấu thăng trong âm nhạc, vì dấu này viết liền với tên nốt
#1, Invoice #123 Một số, không phải thẻ: tên thẻ không thể bắt đầu bằng chữ số
#ff0000, #fff Một mã màu
varlig.app/docs#tags Địa chỉ web có phần neo

Tên thẻ phải bắt đầu bằng chữ cái. Ba, bốn, sáu hoặc tám chữ số thập lục phân sau dấu thăng được hiểu là màu, nên #fee là màu còn #fees là thẻ.

Thẻ trong ghi chú và thẻ trong khối

Các thẻ dùng để tổ chức ghi chú trong thanh bên được giải thích ở Thẻ, liên kết và liên kết ngược. Chúng không áp dụng bên trong khối tính toán: #food viết trong khối chỉ gắn nhãn dòng để tính tổng và không bao giờ xuất hiện ở thanh bên; #food trong phần ghi chú bên ngoài khối dùng để phân loại ghi chú, không ảnh hưởng đến phép tính. Viết thẻ ở cả hai nơi nếu muốn cả hai chức năng. Có một khác biệt nhỏ: thẻ trong ghi chú có thể chứa khoảng trắng nếu kết thúc bằng dấu # thứ hai, còn thẻ trong khối tính toán luôn kết thúc ở khoảng trắng đầu tiên.

Tra cứu hàm danh sách

Lời gọi hàm Tác dụng
range(start,end) Các số nguyên từ start đến end, bao gồm cả hai đầu
range(start,end,step) Đếm theo step, có thể là số âm hoặc phân số nhưng không phải là số không
length(list), count(list) Số lượng giá trị
sort(list) Nhỏ nhất đến lớn nhất; chỉ những con số đơn giản
reverse(list) Các giá trị giống nhau theo thứ tự ngược lại; bất kỳ giá trị nào
unique(list) Giữ lần xuất hiện đầu tiên của mỗi giá trị
slice(list,start,end) Các giá trị từ chỉ mục start đến, nhưng không bao gồm, chỉ mục end
map(expression,variable,list) Tính biểu thức một lần cho mỗi giá trị
filter(condition,variable,list) Giữ các giá trị mà điều kiện là true
calc
range(1, 5) cho kết quả [1, 2, 3, 4, 5]
range(0, 100, 25) cho kết quả [0, 25, 50, 75, 100]
range(10, 0, -2) cho kết quả [10, 8, 6, 4, 2, 0]
scores = [72, 85, 91, 64, 88]
sort(scores) cho kết quả [64, 72, 85, 88, 91]
reverse(sort(scores)) cho kết quả [91, 88, 85, 72, 64]
slice(sort(scores), 0, 3) cho kết quả [64, 72, 85]
unique([4, 2, 4, 6, 2]) cho kết quả [4, 2, 6]

reverse(sort(…)) cho kết quả là lớn nhất trước, và slice(sort(…), 0, 3) chọn ra ba số thấp nhất.

Giới hạn lát cắt phải thỏa mãn 0 <= start <= end <= length. start và end bằng nhau đưa ra một danh sách trống. Không có scores[0:2] tốc ký; viết slice(scores, 0, 2).

unique so sánh các giá trị chính xác khi chúng được lưu trữ, vì vậy 1 kg và 1000 g được tính là hai giá trị khác nhau và hai kết quả khác nhau ở chữ số thập phân thứ mười không được hợp nhất.

Ánh xạ và lọc

map tính một biểu thức cho từng giá trị trong danh sách. filter giữ những giá trị thỏa điều kiện. Trong cả hai, đối số đầu là biểu thức, tiếp theo là tên đại diện cho từng giá trị, cuối cùng là danh sách:

calc
scores = [72, 85, 91, 64, 88]
map(s + 5, s, scores) cho kết quả [77, 90, 96, 69, 93]
filter(s >= 80, s, scores) cho kết quả [85, 91, 88]
count(filter(s >= 80, s, scores)) cho kết quả 3
average(filter(s >= 80, s, scores)) cho kết quả 88

Đọc filter(s >= 80, s, scores) là "các giá trị s trong scores trong đó s >= 80". Cả hai đều làm việc với đơn vị và tiền:

calc
map(p * 1.2, p, [£10, £25, £40]) cho kết quả [£12.00, £30.00, £48.00]
spend = [£42.50, £18.20, £65.00, £23.30]
filter(x > £30, x, spend) cho kết quả [£42.50, £65.00]
sum(filter(x > £30, x, spend)) cho kết quả £107.50

Tên bạn chọn chỉ tồn tại bên trong lời gọi hàm. Nó không thay đổi giá trị cùng tên ở nơi khác trong ghi chú:

calc
x = 10
map(x * 2, x, [1, 2, 3]) cho kết quả [2, 4, 6]
x cho kết quả 10

Điều kiện trong filter phải là một phép so sánh hoặc một giá trị đúng/sai khác. Một số nguyên đơn giản không được coi là đúng, vì vậy filter(x, x, [0, 1, 2]) là một lỗi. Việc ánh xạ hoặc lọc một danh sách trống tạo ra một danh sách trống.

Phép tính với danh sách

Bạn có thể nhân hoặc chia mọi giá trị cho một số duy nhất và cộng hoặc trừ hai danh sách có cùng độ dài theo giá trị:

calc
[30, 36, 22] / 40 * 100 cho kết quả [75, 90, 55]
2 * [3, 1, 4] cho kết quả [6, 2, 8]
-[5, -3] cho kết quả [-5, 3]
mocks = [62, 70, 60]
finals = [72, 78, 69]
finals - mocks cho kết quả [10, 8, 9]
average(finals - mocks) cho kết quả 9
[1 kg, 2 kg] + [500 g, 500 g] cho kết quả [1.5 kg, 2.5 kg]
[72, 85] == [72, 85] cho kết quả true

Dòng đầu đổi điểm theo thang 40 sang phần trăm. Dòng finals - mocks ghép điểm thi thử của từng học sinh với điểm thi chính thức tương ứng.

Một số thao tác không được hỗ trợ trên danh sách:

  • Thêm một số đơn lẻ vào một danh sách, như trong scores + 5. Sử dụng map(s + 5, s, scores) thay vào đó.
  • Thêm danh sách có độ dài khác nhau. Các giá trị không bao giờ được lặp lại để làm cho độ dài khớp.
  • Nhân hai danh sách phẳng với *. Đối với tổng của các tích theo cặp, sử dụng dot: dot([2, 3, 1], [4, 5, 10]) là 33, ví dụ hai ly cà phê ở mức 4, ba loại trà ở mức 5 và một chiếc bánh ở mức 10. Giữa danh sách các hàng, * là phép nhân ma trận, được bao phủ trong Vectơ và ma trận.

Danh sách các hàng

Một danh sách các hàng hoạt động giống như một bảng nhỏ. average và sum hoạt động xuống các cột và map có thể hoạt động trên các hàng:

calc
# Each row is one student: [mock, final]
results = [[62, 72], [70, 78], [60, 69]]
average(results) cho kết quả [64, 73]
sum(results) cho kết quả [192, 219]
map(average(r), r, results) cho kết quả [67, 74, 64.5]

median, min, max và stddev không chấp nhận danh sách các hàng. Sử dụng map trên các hàng, như trong dòng cuối cùng, hoặc tách một cột thành danh sách riêng của nó.

Các quy tắc chính xác cho tất cả các thao tác này nằm trong tham chiếu toán học nâng cao.

Kết hợp các phần

Đây là một tuần đếm bước từ đồng hồ, với mục tiêu hàng ngày:

calc
# Steps, Monday to Sunday
steps = [8200, 10400, 6300, 12000, 9100, 7400, 9600]
goal = 9000
sum(steps) cho kết quả 63,000
average(steps) cho kết quả 9,000
median(steps) cho kết quả 9,100
Days on target: count(filter(s >= goal, s, steps)) cho kết quả 4
Spread: max(steps) - min(steps) cho kết quả 5,700
# Roughly 0.75 m per step
walked = sum(steps) * 0.75 m
walked in km cho kết quả 47.25 km

Số bước trung bình đúng bằng mục tiêu, nhưng chỉ có bốn ngày đạt mục tiêu; chênh lệch giữa ngày nhiều nhất và ít nhất là 5.700 bước. Đổi goal hoặc dán số bước của tuần tới để mọi dòng cập nhật.