python - Python 中唯一的对象列表不起作用

标签 python list for-loop

我正在尝试使用 Python 创建一个唯一的对象列表,但我失败了。不管我用的是list还是set,好像都不行。当我打印列表/集合时,我注意到列表中有几个非唯一对象。我意识到情况就是这样,因为其中一些对象在单词的开头有一个“空格”。我环顾四周,认为使用·lstrip(' ')· 会对我的事业有所帮助,但遗憾的是它没有。

最奇怪的是'唯一对象的数量'是正确的,但是最后创建的唯一对象列表是错误的。谁能指出我哪里出错了?

我感兴趣的列是“对象”,唯一列表应包含OwlCatFox山羊 Ant 水牛狮子老虎

示例数据:

Key    ID    Name    Code    State    Object
01     NULL  NULL   NULL    NULL      Athletics, Light,Netball
02     NULL  NULL   NULL    NULL      BMX Track, Gridiron, Oval
05     NULL  NULL   NULL    NULL      Dog park, Cricket, Soccer
10     NULL  NULL   NULL    NULL      Netball, Oval, Softball
21     NULL  NULL   NULL    NULL      Seat, Playground, Ping Pong Table
13     NULL  NULL   NULL    NULL      Bench, Bike Rack, Seat

我的工作代码附在下面:

import csv

fOpen1=open('C:\Data.csv')
uniqueList=csv.writer(open('C:\UniqueList.csv', 'wb'))

Master=csv.reader(fOpen1)
Master.next()

unique=[]

for row in Master:
    for item in row[5].split(','):
        item.strip(' ')
        if item not in unique:
            unique.append(item)
uniqueList.writerow(unique)

我最后得到的是重复项,其中包括 2 只狐狸,还缺少一些独特的条目。当然,这只是虚拟数据,但我希望我能清楚地解释发生了什么。

更新 1: 我已经更新了脚本,它工作正常,但又出现了另一个问题。我已经用我正在使用的真实数据更新了该列。未添加到最终列表中的独特项目包括:

Gridiron
Cricket
Ping Pong Table
Softball

更新 2:

我已经恢复到原来的“错误”脚本,因为它现在可以正常工作了。我正在处理的 csv 文件有问题。

谢谢

最佳答案

str.lstrip(' ')不是就地方法,它返回剥离的字符串。您需要将其分配回 object -

object = object.lstrip(' ')

假设 Python 2.7+(或 3.1+),更快的方法是使用 set ,也许还有 set comprehension 。示例 -

unique = {obj.lstrip() for row in Master for obj in row[5].split(',')}
uniqueList.writerow(list(unique))

请注意,这不会保留任何顺序,因为 set 没有顺序。如果顺序很重要,您可以使用 set 来存储已经看到的值。示例 -

unique=[]
seen_set = set()
for row in Master:
    for obj in row[5].split(','):
        obj = obj.lstrip(' ')
        if obj not in seen_set:
            unique.append(obj)
            seen_set.add(obj)

另外,我想建议您不要将 object 用作变量名,因为它是内置类的名称(由所有其他类扩展)。


此外,似乎有些字符串末尾有空格,所以最好使用 .strip().strip(' ') 代替.lstrip(' ') 的。具有集合理解的 strip 示例 -

unique = {obj.strip() for row in Master for obj in row[5].split(',')}
uniqueList.writerow(list(unique))

关于python - Python 中唯一的对象列表不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32835807/

相关文章:

javascript - 从 for 循环返回数据

java - 将 stringbuilder 与 for 循环一起使用

python - 用户输入平均值

Python URL 编码中出现元音变音错误

wpf - 在文件夹中搜索和列出 WPF 资源字典

python - 在 Python 函数中返回多个列表

math - Octave 中的 1-of-K 编码

python - 如何根据该组中的行数分配列值

python - matplotlib 中的图例设置(numpoints 和 scatterpoints)不起作用

c++ - 显示列表无法正常工作