2013-10-24 19 views
23

Làm thế nào để tôi làm một cái gì đó giống nhưThay đổi một chuỗi các số nguyên cách nhau bằng dấu cách để danh sách int

x = '1 2 3 45 87 65 6 8' 

>>> foo(x) 
[1,2,3,45,87,65,6,8] 

Tôi hoàn toàn bị mắc kẹt, nếu tôi làm điều đó bằng cách chỉ số, sau đó những con số với hơn 1 chữ số sẽ được chia nhỏ. Xin vui lòng giúp đỡ.

+1

Để người bỏ phiếu: Tôi nghĩ câu hỏi này khá ổn. Mặc dù anh ấy không hiển thị mã, anh ấy thể hiện nỗ lực của mình: "Tôi hoàn toàn bị mắc kẹt, nếu tôi làm theo chỉ mục, thì các con số có nhiều hơn 1 chữ số sẽ bị chia nhỏ" – aIKid

+0

Có, tôi đồng ý alKid anh ta hỏi thêm những câu hỏi mà tôi đang phải đối mặt bây giờ. bởi vì một số người có một đặc quyền để downvote nó không có nghĩa là downvote mọi điều. –

+0

Tôi vừa xem qua hồ sơ của bạn haha. Nếu bạn muốn đặt câu hỏi một lần nữa, bạn có thể tạo một hồ sơ mới hoặc tăng danh tiếng của mình. Tôi cũng đã ở trong tình huống đó. – aIKid

Trả lời

26

Bạn có thể sử dụng danh sách hiểu biết kết hợp với các phương pháp .split():

x = [int(i) for i in x.split()] 

Hoặc bạn có thể sử dụng map là tốt:

x = map(int, x.split()) 

này sẽ tạo ra một list của int 's nếu bạn muốn số nguyên.

hoặc chỉ sử dụng .split() cho một danh sách các chuỗi:

x = x.split() 

Nếu bạn muốn tạo ra một danh sách các str

+0

+1 để chuyển đổi thành một int –

+0

cho chuỗi bạn chỉ cần 'x = x.split()' –

0

Chỉ cần để thực hiện một lời giải thích rõ ràng.

Bạn có thể sử dụng phương thức chuỗi str.split() để chia chuỗi thành danh sách. Bạn có thể tìm hiểu thêm về phương pháp này here.

Ví dụ:

def foo(x): 
    x = x.split() #x is now ['1','2','3','45', ..] the spaces are removed. 
    for i, v in enumerate(x): #Loop through the list 
     x[i] = int(v) #convert each element of v to an integer 

Điều đó sẽ làm điều đó!

>>> x 
[1, 2, 3, 45, 87, 65, 6, 8] 
+0

Đó không phải là cách 'liệt kê' hoạt động ... nó trả về chỉ mục và giá trị tại chỉ mục đã cho dưới dạng bộ tuple. Mã này sẽ thất bại trên * hoặc * 'int (i)' và 'x.index (i)'. – SethMMorton

+0

@SethMMorton Rất tiếc về điều đó. Đã cập nhật câu trả lời của tôi. – aIKid

+0

Mã của tôi chưa hoàn tất, tôi đã quên và gửi mã. Lấy làm tiếc. – aIKid

1

Một dòng đơn giản có thể được ...

print (map(int, x.split())) 

Theo một số một cách khôn ngoan chỉnh tôi, trong python> = 3, nó sẽ trở thành,

print(list(map(int,x.split()))) 

Nó cũng có thể người dùng trong các phiên bản cũ hơn.

+5

Lưu ý rằng trong python3, 'map' trả về một đối tượng bản đồ *, vì vậy bạn sẽ cần phải gọi' list' trên nó để biến nó thành một danh sách. – SethMMorton

+0

Cảm ơn SethMMorton, tôi không biết về nó :) –

2

Không cần phải lo lắng, vì python cung cấp hàm split() để thay đổi chuỗi thành danh sách.

x='1 2 3 4 67 8 9' 
x.split() 

[ '1', '2', '3', '4', '67', '8']

hoặc nếu bạn muốn đầu ra ở dạng số nguyên sau đó bạn có thể sử dụng chức năng bản đồ

map(int ,x.split(' ')) 

[1, 2, 3, 4, 67, 8]

2

s=' 1 2 3 4 67 8 9 '
nếu có một không gian ở đầu hoặc cuối của chuỗi hoặc nhiều khoảng cách giữa các mặt hàng như trên, các chức năng:
out = [item for item in s.split(' ')]
sẽ trở lại mục rỗng:
['', '1', '2', '', '3', '4', '67', '8', '9', '']
Bạn có thể lọc nó ra:
out = [item for item in filter(None, s.split(' '))]
Output trở thành:
['1', '2', '3', '4', '67', '8', '9']
bộ lọc với Không như arg đầu tiên loại bỏ các yếu tố sản phẩm nào.

+0

Có, nhưng .. Bản đồ cho nếu bạn đã lặp lại là gì? Điều đó cũng giống nhau nếu không có 'map':' [int (i) cho i trong bộ lọc (None, s.split (''))] 'hoặc không có danh sách hiểu:' map (int, filter (None, s.split (''))) ' – Mikaelblomkvistsson

0

Giả sử bạn chỉ có chữ số trong đầu vào của bạn, bạn có thể có một cái gì đó như sau:

>>> x = '1 2 3 45 87 65 6 8' 
>>> num_x = map(int, filter(None, x.split(' '))) 
>>> num_x 
[1 2 3 45 87 65 6 8] 

này sẽ chăm sóc các trường hợp khi các chữ số được ngăn cách bởi nhiều hơn một nhân vật không gian hoặc khi có không gian ký tự ở phía trước hoặc phía sau đầu vào. Một cái gì đó như sau:

>>> x = ' 1 2 3 4 ' 
>>> num_x = map(int, filter(None, x.split(' '))) 
>>> num_x 
[1, 2, 3, 4] 

Bạn có thể thay thế đầu vào thành x.split(' ') để khớp với các loại phân cách khác, ví dụ: , hoặc ; v.v.

Các vấn đề liên quan