-2

我在这里有一个脚本,它可以抓取一个 csv,在一列中它只是名称颜色。

您如何遍历列表并获取独特的项目(删除重复项)?

电流输出: 黑、蓝、蓝、红、红、绿

所需输出: 黑色、蓝色、红色、绿色

在我的代码中,我以某种方式管理了一个 continue for 循环。

#!/usr/bin/python
import csv
import sys
import argparse

# creates a text file of all the colors in pipe seperated format
# parsing command line options
parser = argparse.ArgumentParser(prog='desc', description=__doc__)
parser.add_argument('-i', '--input', help='Input file', nargs='?', type=argparse.FileType('r'), default=sys.stdin)
parser.add_argument('-o', '--output', help='Output file', nargs='?', type=argparse.FileType('w'), default=sys.stdout)
args = parser.parse_args(sys.argv[1:])
# Declare variables from input
inf, outf = args.input, args.output
outf = csv.writer(outf)

print 'Loading %s file into memory' % inf.name
data = []
needle = ''
for i, line in enumerate(csv.reader(inf).next()):
    needle = line[11]
    if len(data) == 0:
        data.append(needle)
        continue
    j = 0
    for j, item in enumerate(data):
        print item
        if needle == item:
            print 'match'
            continue
        else:
            print 'no match: appending item'
            data.append(item)
            continue
4

4 回答 4

4

您可以使用set(). 看看这个简单的例子,我想这就是你想要的:

>>> list1=[1,2,3,4,5,6]
>>> list2=[4,5,6,7,8,9]
>>> sett=set(list1).union(set(list2))
>>> print(sett)
{1, 2, 3, 4, 5, 6, 7, 8, 9}
于 2012-05-28T21:34:54.690 回答
2

您实际上没有 2 个列表。您只有一个列表,第 [11] 行,如果您在添加到结果之前曾查看过整个结果列表,您可以在每一行检查整个结果列表。这将提供 O(n2) 运行时间,如果您的列表较大,您会注意到它。已经建议设置符号:

data = set()
for row in csv.reader(inf).next():
    data.add(row[11])

唯一的缺点是这不稳定。如果你需要维持秩序,你只需要几个额外的步骤。

data = []
for row in csv.reader(inf).next():
    data.append(row[11])

result = []
for entry in data:
    if entry not in result: result.append(entry)
于 2012-05-28T22:36:29.830 回答
1

不能只用set吗?

data = set()

for i, line in enumerate(csv.reader(inf)):
    if i == 0:
        continue
    data.add( line[11] )

在您的代码中,我找不到您需要迭代 2 个循环的原因(?)如果您需要列表,您可以将集合转换为列表: data = list(data)

于 2012-05-28T21:29:44.327 回答
0

如何将列表转换为集合,并提取独特的项目:

a = set(list1)
b = set(list2)
unique_items = a - b #or b - a depending on how you define unique
于 2012-05-28T21:27:40.183 回答