2013-08-26 33 views
10

Tôi có một chuỗi dài, mà về cơ bản là một danh sách như str="lamp, bag, mirror," (và các mặt hàng khác)Làm thế nào tôi có thể trừ hai chuỗi trong python?

tôi đã tự hỏi nếu tôi có thể thêm hoặc bớt một số mặt hàng, trong ngôn ngữ lập trình khác tôi có thể dễ dàng làm: str=str-"bag," và nhận str="lamp, mirror," này doesnt làm việc trong python (Tôi đang sử dụng 2,7 trên một máy tính W8)

Có cách nào để tách chuỗi trên nói "túi", và bằng cách nào đó sử dụng như một phép trừ? Sau đó, tôi vẫn cần phải tìm hiểu cách thêm.

+1

Khi bạn nói 'trừ', bạn có nghĩa là xóa mục khỏi danh sách của mình hoặc xóa các ký tự cuối cùng nếu chúng khớp nhau (và nếu không, hành vi sẽ là gì? Điều gì về giá trị trùng lặp? –

+1

Hãy xem chuỗi thay thế: http://docs.python.org/2/library/string.html#string.replace – kevmo314

+10

'trong các ngôn ngữ lập trình khác mà tôi có thể dễ dàng thực hiện: str = str-" bag "và nhận str = "đèn, gương", 'ngôn ngữ nào? –

Trả lời

10

Bạn có thể làm điều này miễn là bạn sử dụng tốt được hình thành danh sách:

s0 = "lamp, bag, mirror" 
s = s0.split(", ") # s is a list: ["lamp", "bag", "mirror"] 

Nếu danh sách không đúng định dạng, bạn có thể làm như sau, theo đề nghị của @Lattyware:

s = [item.strip() for item in s0.split(',')] 

Bây giờ để xóa các phần tử:

s.remove("bag") 
s 
=> ["lamp", "mirror"] 

Dù bằng cách nào - để tái tạo lại chuỗi, sử dụng join():

", ".join(s) 
=> "lamp, mirror" 

Một cách tiếp cận khác nhau sẽ được sử dụng replace() - nhưng hãy cẩn thận với chuỗi bạn muốn thay thế, ví dụ "mirror" không có một trailing , ở cuối.

s0 = "lamp, bag, mirror" 
s0.replace("bag, ", "") 
=> "lamp, mirror" 
+0

Nó có thể đáng nói đến 'str.split()'. –

+0

Vâng, tôi đã định làm điều đó :) –

+2

Rõ ràng, có một giả thiết ở đây là danh sách được tạo đúng với khoảng trống sau mỗi mục, nếu không phải là trường hợp, thì '[item.strip() cho mục trong s0.split (',')] 'linh hoạt hơn (một [list comprehension] đơn giản (http://www.youtube.com/watch?v=pShL9DCSIUw) với [' str.strip() '] (http : //docs.python.org/3/library/stdtypes.html#str.strip) phương pháp). –

1

bạn nên chuyển đổi chuỗi thành danh sách chuỗi sau đó thực hiện những gì bạn muốn. trông

my_list="lamp, bag, mirror".split(',') 
my_list.remove('bag') 
my_str = ",".join(my_list) 
+0

Tôi chỉ sử dụng tên biến của mình – dare

19

bạn cũng có thể chỉ làm

print "lamp, bag, mirror".replace("bag,","") 
+2

Tất nhiên, chức năng này khác với các ví dụ khác trong trường hợp trùng lặp - OP không đưa ra bất kỳ lời giải thích nào về hành vi cần thiết trong trường hợp đó, nhưng đáng lưu ý. –

+1

điểm tốt ... thực sự phân chia có lẽ là câu trả lời "chính xác", tuy nhiên tôi đã đoán tôi sẽ ném điều này ra khỏi đó. không chắc chắn ngôn ngữ nào hỗ trợ phép trừ chuỗi hoặc cách nó hoạt động trong các ngôn ngữ đã nói –

0

Sử dụng biểu thức chính quy dụ:

import re 

text = "lamp, bag, mirror" 
word = "bag" 

pattern = re.compile("[^\w]+") 
result = pattern.split(text) 
result.remove(word) 
print ", ".join(result) 
+1

Quá mức cần thiết cho tác vụ này. Tại sao lại sử dụng RE khi 'str.split()' thực hiện chính xác những gì được mong muốn? –

+0

Nó chỉ là một ví dụ như tôi đã nói. – badc0re

12

Làm thế nào về vấn đề này ?:

def substract(a, b):        
    return "".join(a.rsplit(b)) 
+1

Giải pháp này khá thanh lịch. – fralau

1

Nếu bạn có hai chuỗi như bên dưới:

t1 = 'how are you' 
t2 = 'How is he' 

và bạn muốn trừ hai chuỗi những sau đó bạn có thể sử dụng đoạn mã sau:

l1 = t1.lower().split() 
l2 = t2.lower().split() 
s1 = "" 
s2 = "" 
for i in l1: 
    if i not in l2: 
    s1 = s1 + " " + i 
for j in l2: 
    if j not in l1: 
    s2 = s2 + " " + j 

new = s1 + " " + s2 
print new 

Output sẽ như thế nào:

là bạn là anh

0

Sử dụng những điều sau đây bạn có thể thêm các từ khác để xóa (["bag", "mirror", ...])

(s0, to_remove) = ("lamp, bag, mirror", ["bag"]) 
s0 = ", ".join([x for x in s0.split(", ") if x not in to_remove]) 
=> "lamp, mirror"