在一个单词中取出标点符号

时间:2014-09-10 16:30:04

标签: python

我有一个函数,它将标点符号和单词列表作为参数。该函数在每个单词中查找并分割标点符号。例如:

["I...love", "you"] ---> ["I","love","you"]

唯一的问题是我使用所谓的“难以理解的列表理解”来做这件事,并且它表现出一些奇怪的行为:

def take_out(symbol, word_list):
        for word in word_list:
            if symbol in word and "http" not in word :
                word_list[word_list.index(word)] = (" ".join([x for x in word.split(symbol)])).split()
        word_list = [[item] if isinstance(item, str) else item for item in word_list]
        word_list = [item for sublist in word_list for item in sublist]
        return word_list

任何人都可以提出另一种方法来完成这项任务而不使用模糊的方法。

2 个答案:

答案 0 :(得分:0)

如果我理解你的问题,试试这个:

z = []
for i in ["I...love","you"]:
    for j in i.split("..."):
        z.append(j)
print(z)

希望这有帮助!

答案 1 :(得分:0)

您可以看到代码插入几条打印行的内容。它会帮助你理解它。

def take_out(symbol, word_list):
  for word in word_list:
    if symbol in word and "http" not in word :
      word_list[word_list.index(word)] = (" ".join([x for x in word.split(symbol)])).split()
      print(word_list)
  word_list = [[item] if isinstance(item, str) else item for item in word_list]
  print(word_list)
  word_list = [item for sublist in word_list for item in sublist]
  print(word_list)
  return word_list

这是输出:

>>> take_out('.', ['I...love','you','...or not?'],)
  [['I', 'love'], 'you', '...or not?']
  [['I', 'love'], 'you', ['or', 'not?']]
  [['I', 'love'], ['you'], ['or', 'not?']]
  ['I', 'love', 'you', 'or', 'not?']

您的代码首先拆分列表中的每个元素,并将结果放在原始位置。因此,对于列表:['我...爱情','你',' ...或不?'],它获得了第一个成员'我...爱',将它分开,结果是一个单词列表['我'爱#39;]。将结果放在原来的[['我',#39;爱情'],'你',#39; ...或不??继续第二个元素。没有什么可以拆分,所以它移动到第三个并拆分它。退出循环。

单词列表现在看起来像[['我',#39;爱情'],'你','或',& #39;不]。第一个列表推导用于规范化列表中的所有元素。 item或[item]你现在明白了吗? item if如果已经是列表,或者[item] if是一个字符串。因此,'你'成为['你']。

上一次列表理解工作需要先前的规范化。它的作用是从内部列表中取出每个项目并将它们放入列表中。所以[['我',#39;爱情'],['你'],['或','不是?&? #39;]]变成了['我'爱情','你','或','不是?& #39]。我希望这有助于您更好地理解您的代码。