Nhập vào nhiều dòng kết thúc bằng 1 dòng chứa số 6 (time limit)

Chào mn. Em có 1 bài tập python, nhập vào các dòng, cho 1 danh sách rỗng. Nếu dòng bắt đầu bằng số 1 thêm số đứng sau 1 vào danh sách, bắt đầu bằng số 2 thì kiểm tra số đứng sau 2 có trong danh sách hay không. Việc nhập kết thúc bằng 1 dòng chỉ chứa số 6. In ra danh sách thu được. vd:
1 2
1 1
2 3
6
Kêt thúc bằng số 6
Tuy nhiên em có 1 vài test bị time limit ở việc nhập. Cho em hỏi có cách nào tối ưu không ạ. Code của em

	a=list(map(int, input().split()))

while a[0]!=6:
	if a[0]==1:
		b.append(a[1])
	else:
		if a[1] in b:
			print(1)
		else:
			print(0)
	a=list(map(int, input().split()))

Em cảm ơn ạ.

Đoc vô hổng hiểu gì hết trơn.

Đề bài yêu cầu gì, điều kiện gì, phải làm gì để đạt mục đích gì?

Khi mình hỏi, thì chịu khó trình bày rõ ràng và đầy đủ ý.
Thói quen này rất quan trọng trong công việc, đặt biệt nếu bạn muốn thăng tiến về sau.

Nhiều người cứ nói sao tui code giỏi mà không được làm lead, còn thằng kia thua tui mà cho nó làm lead, chắc có mờ ám gì. Nhưng họ lại không nghĩ tới cái “khả năgn diễn đạt” và “kỹ năng giao tiếp” là quan trong

2 Likes

Thực ra là mình chỉ muốn tóm gọn cái đề ấy, vì nó thực sự không cần lắm. Xin lỗi vì làm cho bạn khó hiểu, để mình sửa lại

2 Likes

3 Likes

Thì bạn tối ưu việc nhập lại, chỉ ghi nhận dữ liệu chứ không xử lý ngay như đoạn mã của @TaoLaoBidaoBanBanhBa.

1 Like

Cảm ơn bạn nhiều , nhưng mà thầy của mình lại giới hạn bộ nhớ nên nếu không tạo 1 list để lưu các chuỗi nhập vào thì còn các nào không ạ

Screen Shot 2021-09-15 at 17.58.57

Mình có xử lý hết trong vòng lặp rồi mà nó lại bị time limit, với lại khi nhập 1 2 hay 2 44 thì sẽ có dấu cách và số thứ 2 có thể có nhiều chữ số nên mình chỉ nghĩ đc là nhập rồi split nó ra

Logic của để gỉai bài toán cua bạn là như vậy, còn xử lý dữ liệu, handle exception, etc thì bạn phải tự suy nghĩ để làm chứ.

2 Likes

Mình nghĩ vấn đề chỉ ở việc nhập thôi, tại mình có nghĩ rất lâu và tìm kiếm trên mạng nhiều rồi mà không được nên mình mới lên đây hỏi đó. Hi vọng nếu có một cách nhập nào đó nhanh hơn thôi, có gì mình sai mong bạn thông cảm.

Nhiều khi do bạn dùng list đấy. Do x in list là phải duyệt (gần) hết mới biết được.

3 Likes

Dùng set/dictionary thay vì list nha.

5 Likes

Hm, làm sao cậu biết cậu bị time limit ở việc nhập vậy? :smile:
Tớ tưởng tất cả mọi người đều dùng hàm input để nhập chứ? :smile:

Đoạn code này thực ra không có ý nghĩa, phải không? Vì đề bài không nói là cậu phải in 0 - 1 cho mỗi phần tử mà :smile:
Việc in ra stdout thực ra rất tốn kém. Cậu lại in ở trong loop => khả năng cao đây là lý do cậu gặp vấn đề về mặt thời gian đó.

2 Likes

Đoạn code đầu tiên mình up chỉ có nhập thôi á bạn. Mình lấy từng phần tử nhập hay từng list rồi lưu lại để xử lý sau thì k đủ bộ nhớ, còn nếu thực hiện luôn trong while thì vẫn không thể được( mình có lưu giá trị 0 và 1 để in ra sau mà). Có thể do cách mình store giá trị chưa đúng

Nào, logic mà nói, nếu đoạn code của cậu bị time limit ở đoạn nhập, mà đề bài yêu cầu lấy đầu vào từ stdin, tất cả các code đều sẽ bị time limit, đúng không? :smile:
Tớ không nghĩ cậu gặp vấn đề ở phần nhập đâu. Cậu không có cách nào optimize phần đó cả.

Sorry, tớ không thấy có ràng buộc bộ nhớ nào ở trong đề bài của cậu.
Cậu có thể share đề gốc của cậu được không? Vì chốc chốc cậu lại có đề cập tới 1 yêu cầu mới, nên việc thảo luận sẽ rất kém hiệu quả và tốn thời gian của tất cả.

“Thực hiện luôn trong while” => ý cậu có phải là nếu cậu thực hiện xử lý từng dòng đầu vào ngay khi nhận input?
Nếu tớ không nhầm, đó là code mà cậu đưa bọn tớ ở post #1 phải không?

Mặt khác, đề bài cậu yêu cầu:

Chứ có nói gì tới việc in ra 0 với 1 đâu?
Như tớ đề cập, print ra console là thao tác đắt đỏ. Nếu như đó không phải là yêu cầu, cậu có lẽ nên thử xóa nó đi, và submit lại bài tập của cậu. Thử xem nhé! :smile:

Trong lập trình, cậu nên đo đạc để chứng minh giả thiết, hơn là nêu ra giả thiết và để đó.
Cậu thử đo thời gian thực thi của từng dòng lệnh, in ra, và phân tích xem :smile:
Ngoài ra, store giá trị cũng không liên quan tới việc nhập (nhập đối với tớ chỉ lấy input thôi. Store giá trị là xử lý kết quả nhập, nên tớ không phân loại nó nằm ở “phần nhập” đâu :smile:)

Hope it helps!

3 Likes

Cảm ơn mọi người đã giúp mình hiểu là vấn đề mình gặp ở đâu. Mình sẽ tự xử lý vấn đề. Nếu mình phát hiện ra điều gì đó mới mình sẽ nhắn ở đây ạ.

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?