Helpex - Trao đổi & giúp đỡ Đăng nhập
20

Đây là chương trình của tôi,

item_no = []
max_no = 0
for i in range(5):
    input_no = int(input("Enter an item number: "))
    item_no.append(input_no)
for no in item_no:
    if no > max_no:
       max_no = no
high = item_no.index(max_no)
print (item_no[high])

Ví dụ đầu vào: [5, 6, 7, 8, 8]

Ví dụ đầu ra: 8

Làm cách nào để thay đổi chương trình của tôi để xuất ra các số cao nhất giống nhau trong một mảng?

Sản lượng mong đợi: [8, 8]

20 hữu ích 5 bình luận 5.7k xem chia sẻ
29

Chỉ cần sử dụng tối đa maxvà sau đó là của nó countvà kết hợp cả hai trong một danh sách dễ hiểu.

item_no = [5, 6, 7, 8, 8]

max_no = max(item_no)
highest = [max_no for _ in range(item_no.count(max_no))]
print(highest)  # -> [8, 8]

Lưu ý rằng điều này sẽ trả về danh sách một mục trong trường hợp giá trị tối đa của bạn chỉ xuất hiện một lần.


Một giải pháp gần hơn với phong cách lập trình hiện tại của bạn sẽ như sau:

item_no = [5, 6, 7, 8, 8]
max_no = 0  # Note 1 
for i in item_no:
    if i > max_no:
        max_no = i
        high = [i]
    elif i == max_no:
        high.append(i)

với kết quả tương tự như trên tất nhiên.

Ghi chú

  1. Tôi giả định rằng bạn chỉ xử lý các số N * ( 1, 2, ... ). Nếu không phải như vậy, khởi tạo bằng -math.infnên được sử dụng để thay thế.

Lưu ý rằng đoạn mã thứ hai kém hiệu quả hơn đoạn mã đầu tiên khá nhiều. Python cho phép bạn hiệu quả hơn các vòng lặp rõ ràng, giống như fortran này và bản thân nó sẽ hiệu quả hơn khi bạn sử dụng đúng cách.

29 hữu ích 5 bình luận chia sẻ
21

Bạn có thể làm điều đó ngắn hơn nữa:

item_no = [5, 6, 7, 8, 8]
#compute once - use many times
max_item = max(item_no)
print(item_no.count(max_item) * [max_item])

Đầu ra:

[8, 8]
21 hữu ích 2 bình luận chia sẻ
7

Bạn có thể sử dụng listkhả năng hiểu cho nhiệm vụ đó theo cách sau:

numbers = [5, 6, 7, 8, 8]
maxnumbers = [i for i in numbers if i==max(numbers)]
print(*maxnumbers,sep=',')

đầu ra:

8,8

*toán tử in printđược sử dụng để giải nén các giá trị, sepđược sử dụng để thông báo trình phân printtách sẽ sử dụng: ,trong trường hợp này.

CHỈNH SỬA: Nếu bạn muốn nhận các chỉ số có giá trị lớn nhất và maxchỉ gọi một lần thì hãy thực hiện:

numbers = [5, 6, 7, 8, 8]
biggest = max(numbers)
positions = [inx for inx,i in enumerate(numbers) if i==biggest]
print(*positions,sep=',')

Đầu ra:

3,4

Như bạn có thể kiểm tra numbers[3]là bằng biggestnumbers[4]bằng biggest.

7 hữu ích 5 bình luận chia sẻ
4
  1. Đếm sự xuất hiện của số tối đa

  2. lặp qua danh sách để in số tối đa cho phạm vi đếm (1)

Do đó :

item_no = [5, 6, 7, 8, 8]
counter = item_no.count(max(item_no))      # 2
print([max(item_no) for x in range(counter)])   

ĐẦU RA :

[8, 8]
4 hữu ích 1 bình luận chia sẻ
3

Vấn đề này có thể được giải quyết trong một dòng, bằng cách tìm một mục bằng giá trị lớn nhất: Để cải thiện hiệu suất, hãy lưu trữ max trong var Mvalue = max (item_no) [i for i in item_no if i==Mvalue]

3 hữu ích 3 bình luận chia sẻ
2

Tôi nghĩ sẽ tốt hơn nếu chúng ta đánh giá maxmảng trong mảng và nó counttrong một lần lặp

def maxs(iterable):
    max = None
    count = 0
    for index, value in enumerate(iterable):
        if index == 0 or value >= max:
            if value != max:
                count = 0
            max = value
            count += 1
    return count * [max]


print (maxs([5, 6, 7, 8, 8]))   # [8, 8]
print (maxs([3, 2, 4, 5, 1, 2, 4, 5, 2, 5, 0])) # [5, 5, 5]
print (maxs([])) # []

Hãy thử một lần!!

2 hữu ích 3 bình luận chia sẻ
1

Tôi nghĩ rằng không có cách nào khả thi để tìm tất cả các số tối đa chỉ với một dòng NHƯNG nó sẽ hoạt động với điều này trước hết chúng ta sẽ sắp xếp danh sách theo thứ tự tăng dần sau đó làm điều này

yourList = [7,7,76,4,54,4,5,234,5,56,7,234,34,234,234]

yourList.sort()
ind = yourList.index(max(yourList))
for i in range(ind,ind+(len(yourList)-ind)):
    print(yourList[i])


về cơ bản, chúng ta sẽ lấy chỉ số của số tối đa đầu tiên, sau đó chúng ta sẽ trừ nó theo chiều dài của danh sách và chúng ta sẽ có bao nhiêu chỉ số để cộng với tất cả các chữ số tối đa

HOẶC LÀ

có một cách khác để làm điều đó theo cách này

lis = [1,2,3,12,12,1,12,3,4,5,6,12, 12]
count = lis.count(max(lis))
loop = [print(max(lis), end=" ") for i in range(count)]

bằng cách này, chúng tôi sẽ nhận được số lần tối đa đã xuất hiện trong danh sách bao nhiêu lần và in ra bấy nhiêu lần

1 hữu ích 5 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ python arrays python-3.x , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading