Beim Ausführen des folgenden Codes wird ein Syntaxfehler angezeigt. Ich möchte innerhalb eines Listenverständnisses drucken. Wie Sie sehen, habe ich mit print () einen anderen Ansatz (auskommentierte Zeile) ausprobiert. Ich denke jedoch, dass diese Syntax in Python 3 unterstützt wird, da frühere Versionen von Python print als Anweisung behandeln.

  1 import sys
  2 import nltk
  3 import csv
  4 from prettytable import PrettyTable
  5 CSV_FILE = sys.argv[1]
  6 # Handle any known abbreviations, # strip off common suffixes, etc.
  7 transforms = [(', Inc.', ''), (', Inc', ''), (', LLC', ''), (', LLP', '')]
  8 csvReader = csv.DictReader(open(CSV_FILE), delimiter=',', quotechar='"')
  9 contacts = [row for row in csvReader]
 10 companies = [c['Company'].strip() for c in contacts if c['Company'].strip() != '']
 11 for i in range(len(companies)):
 12     for transform in transforms:
 13         companies[i] = companies[i].replace(*transform)
 14 #fields=['Company', 'Freq']
 15 #pt = PrettyTable(fields=fields)
 16 #pt.set_field_align('Company', 'l')
 17 fdist = nltk.FreqDist(companies)
 18 #[pt.add_row([company, freq]) for (company, freq) in fdist.items() if freq > 1] 
 19 #[print("["+company+","+freq+"]") for (company, freq) in fdist.items() if freq > 1] 
 20 [print company for (company, freq) in fdist.items() if freq > 1]
 21 #pt.printt()
~                                           
3
jisu 30 Nov. 2013 im 07:53

3 Antworten

Beste Antwort

In Python-Ausdrücken können keine Anweisungen erscheinen. print ist eine Art von Anweisung in Python 2, und Listenverständnisse sind eine Art von Ausdruck. Unmöglich. Sie können beispielsweise auch keine global - Anweisung in einen Indexausdruck einfügen.

Beachten Sie, dass Sie in Python 2 setzen können

from __future__ import print_function

print() stattdessen als Funktion behandeln zu lassen (wie in Python 3).

11
Tim Peters 30 Nov. 2013 im 03:58

Es ist keine Druckanweisung in Python 3, sondern eine Funktion.

>>> sys.version
'3.4.0a4+ (default:8af2dc11464f, Nov 12 2013, 22:38:21) \n[GCC 4.7.3]'
>>> [print(i) for i in range(4)]
0
1
2
3

Und kehrt zurück:

[None, None, None, None]

Und wie Tim Peters sagte, können keine Aussagen in Verständnis oder Generatorausdrücken enthalten sein.

9
Aaron Hall 1 Dez. 2013 im 15:08

Die andere Antwort lautet: Tu das nicht. Verwenden Sie eine for Schleife. Es ist nicht erforderlich, eine Liste von None im Speicher zu erstellen. Die Druckfunktion gibt None zurück, und das Drucken ist aus Sicht der funktionalen Programmierung nur ein Nebeneffekt. Wenn Sie den Druck benötigen, verwenden Sie eine for-Schleife, da keine Liste im Speicher erstellt werden muss. Wenn Sie die Liste der None benötigen, verwenden Sie None und nicht print(i), da dies Ihre Programm-E / A binden würde.

Wenn Sie beide benötigen, tun Sie dies, damit Sie die nicht benötigte entfernen können, wenn Sie fertig sind.

4
Aaron Hall 1 Dez. 2013 im 15:14