如何使用python将列表理解结果传递到csv

如何使用python将列表理解结果传递到csv,python,python-3.x,csv,Python,Python 3.x,Csv,我有两个长度可变的列表 list1 = ['x1','x2','x3','x4','x5'] list2 = ['x5','x4'] 我尝试以下方法来查找缺少的元素 *[item for item in list1 if item not in list2], sep='\n' 但如果我这样做了 item = *[item for item in skuslist if item not in retaillist], sep='\n' csvwriter.writerow(item)

我有两个长度可变的列表

list1 = ['x1','x2','x3','x4','x5']

list2 = ['x5','x4']
我尝试以下方法来查找缺少的元素

*[item for item in list1 if item not in list2], sep='\n'
但如果我这样做了

item = *[item for item in skuslist if item not in retaillist], sep='\n'
csvwriter.writerow(item)
我无法分配到列表理解

如何将结果传递给writerow?

您可以这样尝试:

import csv

list1 = ['x1','x2','x3','x4','x5']
list2 = ['x5','x4']

with open('output.csv', 'w') as f:
    writer = csv.writer(f, delimiter='\n', quoting=csv.QUOTE_NONE)
    writer.writerow([item for item in list1 if item not in list2])

您需要使用
writerows
为每行写入一个项目,并将每个项目放入一个单元素列表中:

list1 = ['x1','x2','x3','x4','x5']

list2 = {'x5','x4'}

import csv

with open("test.csv","w",newline="") as f:
    cw = csv.writer(f)
    cw.writerows([x] for x in list1 if x not in list2)

详细信息:为要排除的值创建一个
集合
,因为查找速度更快(即查找更多元素)

这里是完成此任务的另一种方法。此方法基于list1和list2之间的差异创建一个集合。代码还按顺序将值写入CSV文件

import csv

list1 = ['x1','x2','x3','x4','x5']
list2 = ['x5','x4']

# Obtain the differences between list1 and list2
list_difference = (list(set(list1).difference(list2)))

# Uses list comprehension to write the values to a CSV file.
# Uses sorted to write the values in order to the CSV file.
with open('output.csv', 'w') as outfile:
   csv_writer = csv.writer(outfile)
   csv_writer.writerows([[x] for x in sorted(list_difference)])
   outfile.close()
你也可以这样做

import csv

list1 = ['x1','x2','x3','x4','x5']
list2 = ['x5','x4']

# Obtain the differences between list1 and list2.
# Uses list comprehension to write the values to a CSV file.
# Uses sorted to write the values in order to the CSV file.
with open('output.csv', 'w') as outfile:
   csv_writer = csv.writer(outfile)
   csv_writer.writerows([[x] for x in sorted(list(set(list1).difference(list2)))])
   outfile.close()

我把它们放在一行,像[x1]、[x2]、[x3]那样,“长”的路是
csvwriter.writerow([item for…],sep=“\n”)
。您可能会想到
csvwriter.writerow(*item)
,但您不能像这样在一个元组中混合位置参数和关键字参数。不再工作了我在csv['x1']、['x2']、['x3']。。合二为一row@Evridiki您想要换行吗?@Evridiki请注意,在注释中发布多行文本不会创建多行文本,因此,
语句的混淆将发生。@kunal如果我对列表1中的项目使用,则无效;如果项目不在列表2中,则如果我做相反的操作,则有效!这两个列表来自两个不同的csv文件,列表1的第一个csv有1列,列表2的第二个csv有6列。如果我设置了(列表1)。差异(列表2)我得到了不可损坏的类型列表为什么?这些示例中没有。这是因为任何一个列表都包含其他列表。