python列表中的最后一个元素是通过拆分字符串创建的

时间:2017-02-15 13:39:39

标签: python string list split strip

所以我有一个我需要解析的字符串。该字符串包含多个单词,用连字符(-)分隔。该字符串也以连字符结尾。

例如one-two-three-

现在,如果我想自己查看单词,我会将字符串拆分为列表。

wordstring = "one-two-three-"
wordlist = wordstring.split('-')

for i in range(0, len(wordlist)):
     print(wordlist[i])

输出

one
two
three
#empty element

我不明白的是,为什么在结果列表中,最后一个元素是一个空字符串。 如何省略这个空元素?

我应该简单地截断列表还是有更好的方法来分割字符串?

9 个答案:

答案 0 :(得分:4)

您有一个空字符串,因为最后一个-字符上的拆分在RHS上产生一个空字符串。在拆分之前,您可以从字符串中删除所有'-'个字符:

wordlist = wordstring.strip('-').split('-')

答案 1 :(得分:2)

如果最后一个元素总是一个-字符,你可以使用[:-1]来省略它,它除了最后一个字符之外还会抓取字符串的所有元素。

然后,像你一样继续split

wordlist = wordstring[:-1].split('-')
print(wordlist)
['one', 'two', 'three']

答案 2 :(得分:2)

您可以使用正则表达式执行此操作:

import re
wordlist = re.findall("[a-zA-Z]+(?=-)", wordstring)

输出:

['one', 'two', 'three']

答案 3 :(得分:1)

在拆分String之前,您应该使用Python的strip内置函数。 E.g:

wordstring = "one-two-three-"
wordlist = wordstring.strip('-').split('-')

答案 4 :(得分:1)

我相信.split()假设在最后-之后还有另一个元素,但它显然是一个空白条目。

您是否愿意在分割之前删除wordstring中的短划线?

wordstring = "one-two-three-"
wordlist = wordstring[:-1].split('-')
print wordlist

OUT: 'one-two-three'

答案 5 :(得分:1)

the docs中解释了这一点:

  

...   如果给出了sep,则连续的分隔符不会组合在一起,并被视为分隔空字符串(例如,'1,,2'.split(',')返回['1', '', '2'])。   ...

如果您知道自己的字符串将始终以'-'结尾,那么只需执行wordlist.pop()即可删除最后一个字符串。

如果您需要更复杂的内容,可能需要了解regular expressions

答案 6 :(得分:1)

仅适用于各种选项:

genrule(
    name = 'foo',
    outs = ['foo.cpp'],
    cmd = 'python gencpp.py',
)

cc_library(
    srcs = ['foo.cpp'], # tried also with :foo
    ...
)

请注意,上述内容还会处理以下情况:gencpp.py(双连字符)

答案 7 :(得分:1)

第一个strip()然后split()

wordstring = "one-two-three-"
x = wordstring.strip('-')
y  = x.split('-')

for word in y:
    print word

答案 8 :(得分:-1)

在拆分之前剥离/修剪字符串。通过这种方式,您将删除尾随" \ n"你会没事的。