使用for循环从列表中删除标点符号

时间:2017-03-17 12:47:26

标签: python python-2.7

我正在使用python 2.7.13并且我被困在一项任务上。我是python的新手。

我应该从列表中的名称中删除标点符号,这是给我的代码:

import string
name = ""
result = []
persons = [["Lisa", "Georgia"],
           ["Chris", "New York"],
           ["Wes", "Oregon"],
           ["Jo-Ann", "Texas"],
           ["Angie", "Florida"]]

我想要打印完全相同的列表,除了“Jo-Ann”需要打印为“JoAnn”。作业说我需要检查每个字符,如果它不是标点符号,我需要将它添加到变量“name”。我完全迷失了;我不知道如何使用for循环执行此操作。 我的老师给了我一些指示:

for every letter in name
if letter is not a punctuation, add to variable "name"
print

对于像我这样的新手来说,这并没有让事情变得更加清晰。有人可以给我一些指示吗?我非常感激。

5 个答案:

答案 0 :(得分:1)

试试这个:

import string
new_persons = [[x[0].translate(None, string.punctuation), x[1]] for x in persons]

说明:

  1. 要从字符串中删除标点符号,我们可以使用'one-example'.translate(None, string.punctuation)
  2. [... for x in persons]是一个列表理解(简写循环),通过使用列表x
  3. 中的元素(在每个循环上分配给persons)来创建新列表
  4. 在循环迭代中,x只是两个元素的内部数组。例如["Jo-Ann", "Texas"]
  5. x[0]是" Jon-Ann" x[1]是"德州"
  6. [x[0].translate(None, string.punctuation), x[1]]表示我们创建了一个由x组成的两个元素的数组,但是从第一个元素中删除了标点符号。

答案 1 :(得分:1)

我认为这是一个非常明显和简单的方式,初学者可以做到这一点。

import string

result = []
# Loop over the [name, state] pairs.
for [name, state] in persons:
    # Make a new name by only keeping desired
    # characters.
    newName = ""
    for letter in name:
        if letter not in string.punctuation:
            newName += letter
    # Add to result.
    result.append([newName, state])

它利用一些非常方便的Python技巧来了解!

  • 第一个是循环中组合值的解包,在这种情况下是[name, state]对。它大致相当于

    [a, b] = [1, 2]
    

    从列表中提取值。

  • 第二个是隐式循环字符串中的字符。如果你写

    for l in "word":
        print(l)
    

    您会看到每个字母都印在一个新行上。 Python会自动将字符串拆分为字符。

之后,您可以开始研究list comprehensions

答案 2 :(得分:0)

获取字符串中的所有标点符号 使用三引号标记字符串的开头和结尾

import string
punc_marks=string.punctuation
name = ''
for i in persons:
    for j in i:
        for k in j:
            if k not in punc_marks:
                name+=k
print(name+"\n")

答案 3 :(得分:0)

以下是使用您老师的方法的示例,基本上您现在应该学习的内容以及您的老师想要的内容:

import string
name = ""
result = []
persons = [["Lisa", "Georgia"],
           ["Chris", "New York"],
           ["Wes", "Oregon"],
           ["Jo-Ann", "Texas"],
           ["Angie", "Florida"]]
for person in persons:
    for every_letter in person[0]: # name
        if every_letter not in string.punctuation: # check if it isn't a punctuation
            name += every_letter # add it to name
    result.append([name, person[1]]) # add the name with no punctuation to result
    name = "" # reset name
print(result)

请尝试从中学习,而不仅仅是复制并粘贴到您的家庭作业

答案 4 :(得分:0)

from nltk.tokenize import RegexpTokenizer

tokenizer = RegexpTokenizer(r'\w+')   
tokenizer=tokenizer.tokenize(persons)