Khi khởi tạo một list nguyên, và dữ liệu nhập vào là một dãy số cách nhau bởi dấu space, python báo lỗi vậy làm cách nào để đưa dữ liệu có chứa dấu space vào list kiểu int trong python?
Cách nhập mảng nguyên có dấu space trong python?
Xoá space trước khi đưa vào là xong, hehe
Tiện thể bạn đưa code luôn lên cho dễ mổ xẻ
tức là dữ liệu vào có dấu space bạn à, yêu cầu của bài toán là thế
Bạn thử nhé
Bạn tìm hiểu 2 câu lệnh list.split và map trong python nhé
Python split: http://www.pythonforbeginners.com/dictionary/python-split
Python map: https://stackoverflow.com/questions/7368789/convert-all-strings-in-a-list-to-int
Đơn giản lắm . Hãy xem ví dụ của mình!
Tưởng tượng ta có như thế này
lst = intput('Enter a sequence number: ')
Sau đó bạn nhập vào với như sau
3 5 1 6
Giờ đây lst
sẽ nhận được chuỗi là '3 5 1 6'
. Để tách space
ta dùng split
với argument
mặc định là split by space
lst = lst.split()
print(lst)
# kết quả là
['3', '5', '1', '6'] # mỗi phần từ là một chuỗi
Và để biến đổi nó thành int
# lấy từng element trong mảng
for i in range(len(lst)):
if lst[i].isdigit(): # check xem đây có phải là chữ số hay không?
lst[i] = int(lst[i]) # ép kiểu nó về 'int'
else:
lst[i] = 0 # gán mặc định bằng 0 nếu không phải là chữ số
Và tất cả những dòng trên có thể ngắn gọn lại bằng cách
lst = input('Enter a sequence number: ').split()
lst = list(map(lambda x: int(x) if x.isdigit() else 0, lst))
arrStr = ['13', '17', '18', '21', '32']
arrInt = map(int, arrStr)
# arrInt is [13, 17, 18, 21, 32]
nguồn https://stackoverflow.com/questions/10145347/convert-string-to-integer-using-map
Cảm ơn bạn đã chỉ dẫn cụ thể
bạn giải thích cụ thể zùm mình dòng này dc không?
`lst = list(map(lambda x: int(x) if x.isdigit() else 0, lst))
lst = input('Enter a sequence number: ').split()
Thì nếu input
nhập vào là 3 5 4
bạn sẽ có được một lst = ['3', '5', '4']
Còn với cái này, mình sẽ nói từ thứ một
lst = list(map(lambda x: int(x) if x.isdigit() else 0, lst))
Đầu tiên là cái lambda x: int(x) if x.isdigit() else 0
. Cái này tương đương với
def: # hàm này đặc biệt là không có tên
if x.isdigit():
return int(x)
else:
return 0
Kế đến là cái map
. Ví dụ ta có thế này
lst = [1, 2, 3]
Với map như thế này
map(str, lst)
sẽ tương tự
for i in range(len(lst)):
lst[i] = str(lst[i])
Do đó, với
map(lambda x: int(x) if x.isdigit() else 0, lst)
sẽ tương tự (tượng tự về nghĩa chứ không phải là có thể dùng cú pháp này
for i in range(len(lst)):
lst[i] = (lambda i: int(i) if i.isdigit() else 0)
Nhưng mà hàm map
sẽ trả về một map object
, và object
này bạn không thể getiitem
như list
giống thế này
print(lst[0])
print(lst[1])
print(lst[n])
Thế nên mình mới convert nó qua list
list(map(.., ..))