Nối nhiều chuỗi nếu chúng không trống trong Python


82

Tôi có bốn chuỗi và bất kỳ chuỗi nào trong số chúng đều có thể trống. Tôi cần nối chúng thành một chuỗi với khoảng cách giữa chúng. Nếu tôi sử dụng:

new_string = string1 + ' ' + string2 + ' ' + string3 + ' ' + string4

Kết quả là một khoảng trống trên đầu chuỗi mới nếu string1là khoảng trống. Ngoài ra, tôi có ba khoảng trống nếu string2string3trống.

Làm thế nào tôi có thể dễ dàng tham gia chúng mà không có khoảng trống khi tôi không cần chúng?

Câu trả lời:


200
>>> strings = ['foo','','bar','moo']
>>> ' '.join(filter(None, strings))
'foo bar moo'

Bằng cách sử dụng Nonetrong filter()cuộc gọi, nó sẽ loại bỏ tất cả các phần tử giả.


2
Làm thế nào để có thể áp dụng giải pháp này khi áp dụng điều này cho một cột của khung dữ liệu. Khi bạn đang cố gắng df.apply(", ".join(filter(None, ...)), axis=1). Làm cách nào để truyền đối số thứ hai của hàm bộ lọc?
Michael

23

Nếu bạn BIẾT rằng các chuỗi không có khoảng trắng ở đầu / cuối:

>>> strings = ['foo','','bar','moo']
>>> ' '.join(x for x in strings if x)
'foo bar moo'

nếu không thì:

>>> strings = ['foo ','',' bar', ' ', 'moo']
>>> ' '.join(x.strip() for x in strings if x.strip())
'foo bar moo'

và nếu bất kỳ chuỗi nào có khoảng trắng không phải ở đầu / ở cuối, bạn có thể vẫn cần phải làm việc chăm chỉ hơn. Hãy làm rõ những gì bạn thực sự có.


Các chuỗi đến từ các trường văn bản đầu vào, vì vậy mọi thứ đều có thể. Cảm ơn!
Goran

-2
strings = ['foo','','bar','moo']
' '.join([x for x in strings if x is not ''])
'foo bar moo'

4
Sử dụng tốt hơn !=thay vì is not. Nó có thể hoạt động, nhưng nó không được đảm bảo. Hoặc chỉ sử dụng [x for x in strings if x].
Tim Pietzcker

7
Không bao giờ sử dụng is notcho các mục không phải là đơn lẻ nếu bạn không thực sự muốn kiểm tra xem cả hai có phải là cùng một đối tượng hay không!
ThiefMaster
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.