我正在使用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
对于像我这样的新手来说,这并没有让事情变得更加清晰。有人可以给我一些指示吗?我非常感激。
答案 0 :(得分:1)
试试这个:
import string
new_persons = [[x[0].translate(None, string.punctuation), x[1]] for x in persons]
说明:
'one-example'.translate(None, string.punctuation)
[... for x in persons]
是一个列表理解(简写循环),通过使用列表x
persons
)来创建新列表
x
只是两个元素的内部数组。例如["Jo-Ann", "Texas"]
x[0]
是" Jon-Ann" x[1]
是"德州" [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)