2017-03-17 11 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

2つのforループが必要です。最初のものは「人」のすべての人を通過し、2番目の人はその人の名前のすべての文字を通過する。 –

+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は2つの要素の内部配列に過ぎません。例えば["Jo-Ann", "Texas"]
  4. x[0]は「ジョン・アン」であるとx[1]
  5. [x[0].translate(None, string.punctuation), x[1]]たちはxからではなく、最初の1から削除句読点を持つ2つの要素の配列を作成する意味「テキサス」です。
+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を調べることができます。

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) 

これから学ぶことを試してみて、ちょうどコピーしないと、あなたの家の仕事

に貼り付けてください:ここでは
0

は、基本的にあなたが今学び、何を、あなたの教師が望んでいることはどうあるべきか、あなたの教師のアプローチを使用した例です。
関連する問題