01/10/2018, 10:51

Cách nhập mảng nguyên có dấu space trong python?

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?

Dark.Hades viết 13:06 ngày 01/10/2018

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ẻ

Trẻ Trâu viết 12:58 ngày 01/10/2018

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ế

Dark.Hades viết 13:07 ngày 01/10/2018

Bạn thử nhé

wandbox.org

[Wandbox]三へ( へ՞ਊ ՞)へ ハッハッ

s = ' 1 ' print(s) print(int(s)) print(s.strip())

Phan Bá Hải viết 12:58 ngày 01/10/2018

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

Henry viết 13:01 ngày 01/10/2018

Đơ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))
Tài Sáng viết 13:03 ngày 01/10/2018
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

Trẻ Trâu viết 13:07 ngày 01/10/2018

Cảm ơn bạn đã chỉ dẫn cụ thể

Trẻ Trâu viết 13:02 ngày 01/10/2018

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))

Henry viết 12:54 ngày 01/10/2018
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(.., ..))
Bài liên quan
0