Lỗi Python TypeError: list indices must be integers or slices, not str,

Chào cả nhà,

Mình có dòng code Python sau đây.

squares = ['orange', 'orange', 'purple', 'blue ', 'orange']
new_squares = []
i = squares[0]
while i=='orange':
    new_squares.append(squares[i])
    i +=1
print(new_squares)

Lỗi báo

TypeError: list indices must be integers or slices, not str

Không biết mình sai chỗ nào?
Xin cảm ơn đã xem bài.

Gán i là chuỗi.
Đoạn này làm gì: i = squares[0]?

4 Likes
squares = ['orange', 'orange', 'purple', 'blue ', 'orange']
new_squares = []


#i = squares[0] 
# không cần cái này
# cái này nghĩa là gán item đầu tiên trong list cho i, là STRING 'orange', 
# squares[i] thì i là index, không thể là string, 
# nên các logic sau đó sẽ bị sai
# Hơn nữa, cái while này của bạn không có break

# duyệt qua tất cả các item from list
for i in squares:

    # nếu gặp thằng 'orange' nào...
    if i == 'orange':

        # ... thì copy nó đem qua list mới
        new_squares.append(i)

print(new_squares)

output sẽ là

[‘orange’, ‘orange’, ‘orange’]
[Finished in 0.5s]

2 Likes

nếu mình muốn chỉ muốn output ra ‘orange’ tới khi nào không phải orange thì dừng lại thì như thế nào?

squares = ['orange', 'orange', 'purple', 'blue ', 'orange']
new_squares = []

# duyệt qua tất cả các item from list
for i in squares:

    # nếu gặp thằng 'orange' nào...
    if i == 'orange':

        # ... thì copy nó đem qua list mới
        new_squares.append(i)
	
	# nếu gặp thằng nào không phải 'orange'...        
    else:
    	# thì xách đít về
    	break

print(new_squares)

Output:

[‘orange’, ‘orange’]
[Finished in 0.5s]

3 Likes

Cám ơn bạn nhiều lắm @TaoLaoBidaoBanBanhBa
Trong trường hợp này mình sử dụng vòng lặp While được không bạn?

squares = ['orange', 'orange', 'purple', 'blue ', 'orange']
new_squares = []

i = 'orange'
while i in squares:
	new_squares.append(i)
	squares.remove(i)

print(new_squares)

Output:

[‘orange’, ‘orange’, ‘orange’]
[Finished in 0.5s]

squares = ['orange', 'orange', 'purple', 'blue ', 'orange']
new_squares = []

i = 'orange'
count = 0
while i in squares:
	if squares[count] == i:
		new_squares.append(i)
		squares.remove(i)
	else:
		break

print(new_squares)

Output:

[‘orange’, ‘orange’]
[Finished in 0.5s]

3 Likes

Cảm ơn bạn nhiều. Chúc bạn ngày mới vui vẻ

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