0

所以我正在读取一个包含两列的 CSV 文件,然后获取所有列的乘积。

我要做的是将他的产品从元组列表转换为列表列表。我最终想用逗号将每个元组组合成一个字符串。这是我的代码:

rowa = []
rowb = []

for row in csvfile:
    if row[0] != "":
        rowa.append(row[0])
    if row[1] != "":
        rowb.append(row[1])
wordlist = list(product(rowa, rowb))

我的伪代码是这样的:

for x in wordlist:
    x = list(x)
    x.join(" ")

print wordlist应该调出一个字符串列表,这将是旧的元组,变成一个列表,然后用空格连接在一起

4

3 回答 3

6

join 方法则相反;在空格字符串上调用它:

for x in wordlist:
    " ".join(x)

它适用于任何序列,因此无需在此处将元组转换为列表。

请注意,您可以免除!= ""列的测试;空字符串也被认为是布尔值 False :

for row in csvfile:
    if row[0]:
        rowa.append(row[0])
    if row[1]:
        rowb.append(row[1])

最后,因为您已经在遍历 wordlist,所以只需将其保留为生成器并完全省去 list 调用。

wordlist = [" ".join(x) for x in product(rowa, rowb)]
于 2012-07-03T14:27:22.877 回答
1

无需创建中间列表

rowa = []
rowb = []

for row in csvfile:
    row0,row1 = row[0].lower(),row1.lower()
    if row0 != row1:
        if row[0] != "":
             rowa.append(row0)
        if row[1] != "":
             rowb.append(row1)
wordlist = product(rowa, rowb)

result = [" ".join(x) for x in wordlist]

生成器表达式应该完成这项工作

编辑 附加要求

于 2012-07-03T14:29:54.500 回答
0

几乎猜到了您的意思,但是您是否要压缩两个列表?

wordlist = zip(rowa, rowb)
于 2012-07-03T14:27:50.143 回答