Что означает row = line.rstrip ("\ n"). Split (",") - PullRequest
0 голосов
/ 13 июля 2020

Я работаю над cs50 / pset6 / DNA и хочу достичь этого: # Strip \n from each line and convert comma separated elements into list И я хочу понять значение этой строки:

row = line.rstrip("\n").split(",")

Не могли бы вы объяснить мне, что имеется ввиду синтаксис, а что делает каждая часть? Спасибо!

Ответы [ 4 ]

1 голос
/ 13 июля 2020

From the docs rstrip:

Возвращает копию строки с удаленными завершающими символами.

Итак, в этом случае , он вернет "\n" в конце строки.

Также из docs , split:

Вернуть список слов в строке, используя sep в качестве строки разделителя.

Следовательно, после удаления "\n" он вернет список строк, разделенных ",".

Пример

>>> s = "a,b,c,d\n"
>>> s.rstrip("\n").split(",")
['a', 'b', 'c', 'd']
1 голос
/ 13 июля 2020

Способ row = line.rstrip("\n").split(",")

Если то же самое, что указано ниже, вы можете повторно использовать string, возвращенный rstrip

row = line.rstrip("\n") # remove newline char at the end
row = row.split(",")    # separate one string into a list of multiple ones, based on the comma
0 голосов
/ 13 июля 2020

Пример str.rstrip ([chars]):

line = "line\n\n"
line.rstrip('\n')
# line is now "line"

line = "li\nne\n\n"
line.rstrip('\n')
# line is now: "line\nne"

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

Пример str.split (sep = None, maxsplit = -1):

line = "1,2,3"
array = line.split(',')
# array is now: [1,2,3]

line = "aebec"
array = line.split('e')
# array is now: [a,b,c]

Ваш пример:

line = "this,is,a,line\n"
array = line.rstrip('\n').split(',')
# array is now: [this,is,a,line]

Итак, сначала он удаляет символ новой строки из справа от строки до последнего последовательного появления символа новой строки, а затем он разделяет строку на части с помощью ',' и вставляет эти части в массив.

Совет по вашей проблеме

Ваш код будет работать, если линия действительно одна линия. Если это похоже на

line = "a,x\nb,z,v\nc,n,j\ndy,j,k\n"

, то для удаления новой строки используйте: line.replace('\n')

Общий совет

Ваша проблема не была такой сложной. Вы читали документацию или пытались выполнить данную строку в интерпретаторе python? Если нет, пожалуйста, сделайте это в следующий раз, документы дадут вам ответ быстрее, чем я:)

0 голосов
/ 13 июля 2020

Вот что сказано в документации:

 |  rstrip(self, chars=None, /)
 |      Return a copy of the string with trailing whitespace removed.
 |      
 |      If chars is given and not None, remove characters in chars instead.

И:

 |  split(self, /, sep=None, maxsplit=-1)
 |      Return a list of the words in the string, using sep as the delimiter string.
 |      
 |      sep
 |        The delimiter according which to split the string.
 |        None (the default value) means split according to any whitespace,
 |        and discard empty strings from the result.
 |      maxsplit
 |        Maximum number of splits to do.
 |        -1 (the default value) means no limit.

Подводя итог, инструкция сначала удаляет каждый \n (это новый строка ). Это дает одну длинную строку.
Затем разрежьте линию на каждой ,. Это дает список, каждый элемент является частью начальной длинной строки.

...