2017-03-17 162 views
-1

我正在使用python 2.7.13,并且我被卡在一个任务上。我对python完全陌生。使用for循环从列表中删除标点符号

我应该从列表中删除名称中的标点符号,这是已经给我的代码:我想打印完全相同的列表

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

,除“乔安”需要打印为“JoAnn”。作业说,我需要检查每个字符,如果它不是标点符号,我需要将它添加到变量“名称”。我完全迷失了;我不知道如何用for循环做到这一点。 我的老师给我一些指点:

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

这并不使事情对于我这样一个完整的新手更清晰。有人能给我一些指点吗?我非常感谢它。

+3

你的方法是什么? – abccd

+0

您需要两个for循环。第一个是通过“人”中的每个人,第二个是通过该人名的每一个字母。 –

+1

欢迎来到StackOverflow!在这里通常工作的方式是,您提供您编写的代码来尝试解决问题,解释它正在做什么以及它应该做什么,然后我们可以告诉你为什么代码按照它的方式行事,并建议如何解决它。 – glibdud

回答

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)的新列表persons
  3. 在循环迭代中,x只是两个元素的内部数组。例如["Jo-Ann", "Texas"]
  4. x[0]是“乔恩-安”和x[1]是“德克萨斯”
  5. [x[0].translate(None, string.punctuation), x[1]]意味着我们从x但与来自第一卸下的标点符号创建两个元件的阵列。
+5

尽管这可能是正确的,但我不确定这对于一个完整的python新手是否有助于更好地理解事物... – Ben

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") 
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

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) 

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