执行以下代码时出现语法错误。 我想在列表理解中打印。 如您所见,我使用print()尝试了一种不同的方法(注释掉了一行)。但我认为Python 3支持这种语法,因为早期版本的Python将print视为一种语句。
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()
~
答案 0 :(得分:11)
没有语句可以出现在Python表达式中。 print
是Python 2中的一种语句,列表推导是一种表达式。不可能。例如,您也不能在索引表达式中放置global
语句。
请注意,在Python 2中,您可以添加
from __future__ import print_function
将print()
视为函数(就像在Python 3中一样)。
答案 1 :(得分:9)
这不是Python 3中的print语句,它是一个函数。
>>> 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
并返回:
[None, None, None, None]
正如蒂姆·彼得斯所说,没有任何陈述可以用于理解或生成器表达。
答案 2 :(得分:3)
另一个答案是:不要这样做。使用for
循环。没有必要在内存中实现None
的列表。打印功能返回None,从功能编程的角度来看,打印只是一个副作用。如果需要打印,请使用for循环,因为不需要在内存中实现列表。如果您需要None
的列表,请使用None
,而不是print(i)
,因为这会使您的程序IO受限。
如果您需要两者,请执行这些操作,以便在完成后轻松删除不需要的那个。