2014-02-05 2 views
6

Я хочу, чтобы разделить строку с двумя словами, как «word1 word2», используя раскол и разделение и печать (с использованием для) слов отдельно, как:Python разделы и разделить

Partition: 
word1 
word2 

Split: 
word1 
word2 

Это мой код:

print("Hello World") 
name = raw_input("Type your name: ") 

train = 1,2 
train1 = 1,2 
print("Separation with partition: ") 
for i in train1: 
    print name.partition(" ") 

print("Separation with split: ") 
for i in train1: 
    print name.split(" ") 

Это происходит:

Separation with partition: 
('word1', ' ', 'word2') 
('word1', ' ', 'word2') 

Separation with split: 
['word1', 'word2'] 
['word1', 'word2'] 

ответ

13

Команда как name.split() возвращает список.Вы могли бы рассмотреть итерацию над этим списком:

for i in name.split(" "): 
    print i 

Потому, что вы написали, а именно

for i in train: 
    print name.split(" ") 

выполнит команду print name.split(" ") дважды (один раз для значения i=1, и еще раз для i=2). И дважды он напечатает весь результат:

['word1', 'word2'] 
['word1', 'word2'] 

Подобное происходит с partition - за исключением того, что возвращает элемент, который вы разделяете, а также. Таким образом, в этом случае вы можете захотеть сделать

print name.partition(" ")[0:3:2] 

вернуть элементы 0 и 2. В качестве альтернативы вы можете сделать

train = (0, 2,) 
for i in train: 
    print name.partition(" ")[i] 

Чтобы напечатать элементы 0 и 2 в двух последовательных проходах через петлю. Обратите внимание, что этот последний код более неэффективен, поскольку он дважды вычисляет раздел. Если вы позаботились, вы могли бы написать

train = (0,2,) 
part = name.partition(" ") 
for i in train: 
    print part[i] 
15

str.partition возвращает кортеж из трех элементов. Строка перед строкой секционирования, сама секция и остальная часть строки. Таким образом, он должен быть использован как этот

first, middle, rest = name.partition(" ") 
print first, rest 

Чтобы использовать str.split, вы можете просто напечатать расщепленные строки, как этот

print name.split(" ") 

Но, когда вы называете это так, если строка имеет более одного пробела, вы получите более двух элементов. Например

name = "word1 word2 word3" 
print name.split(" ")   # ['word1', 'word2', 'word3'] 

Если вы хотите разделить только один раз, вы можете указать время числа разделить в качестве второго параметра, как этого

name = "word1 word2 word3" 
print name.split(" ", 1)  # ['word1', 'word2 word3'] 

Но, если вы пытаетесь разделенным на основе пробельные символы, вам не нужно проходить " ". Вы можете просто сделать

name = "word1 word2 word3" 
print name.split()   # ['word1', 'word2', 'word3'] 

Если вы хотите, чтобы ограничить число расколов,

name = "word1 word2 word3" 
print name.split(None, 1)  # ['word1', 'word2 word3'] 

Примечание: не Использование None в split или указать никаких параметров, это то, что происходит

Цитирование от split documentation

Если sep не указан или None, используется другой алгоритм разделения : пробелы последовательных пробелов рассматриваются как один разделитель , и результат не будет содержать пустых строк в начале или заканчивается, если строка имеет ведущую или конечный пробел. Следовательно, , разделяющее пустую строку или строку, состоящую только из пробелов с разделителем None, возвращает [].

Таким образом, вы можете изменить свою программу как этот

print "Partition:" 
first, middle, rest = name.partition(" ") 
for current_string in (first, rest): 
    print current_string 

print "Split:" 
for current_string in name.split(" "): 
    print current_string 

Или вы можете использовать str.join метод как этот

print "Partition:" 
first, middle, rest = name.partition(" ") 
print "\n".join((first, rest)) 

print "Split:" 
print "\n".join(name.split()) 
Смежные вопросы