我正在寻找创建一个程序,我想要或多或少地做以下几点:
我想要的是到目前为止我们拥有的所有UNIQUE大学名称的列表(此时,缩写对我来说无关紧要),但是TOTAL名称的列表非常大。由于python集的查找时间非常快,我想首先检查名称是否在集合中,如果不是,则将名称附加到唯一列表和集合中(我还需要一个列表,因为订购事项)。当你检查某个东西是否在某个集合中时,那个“in”命令是否与检查一串字符是否在一个更大的字符串中一样?换句话说,通过字符串比较,“阿拉巴马大学 - 伯明翰大学”中的“阿拉巴马大学”返回True。在集合比较中,如果我测试“阿拉巴马大学”是否在集合中,但是仅仅添加了“阿拉巴马大学 - 伯明翰”,它是否会返回真实状态?如果是这样,有没有办法测试是否已添加EXACT字符串“阿拉巴马大学”而不是包含“阿拉巴马大学”的其他字符串?
答案 0 :(得分:2)
要解决您的第一个问题,您可以查看OrderedSet
。 recipe引用了Python 2 Documentation。{{3}}。这在Py2.6或更高版本以及3.0或更高版本上运行,无需任何修改。该接口几乎与普通集完全相同,只是初始化应该用列表完成。
>>> s = OrderedSet([1, 2, 3])
>>> s.add(4)
使用此配方需要您自担风险。
接下来,in
测试集合内部的准确性。
观察:
>>> s = set(['hello'])
>>> 'he' in s
False
>>> s.add('he')
>>> 'he' in s
True
换句话说,搜索词必须完全存在(python会对字符串进行散列以确定它是否存在,因此部分字符串将不匹配)。
同样适用于OrderedSet
。
答案 1 :(得分:0)
university_col = ...
universities = set()
for row in csv_reader:
universities.add(row[university_col])
result = set()
base_name = ''
for university_name in sorted(universities):
if not base_name or base_name not in university_name:
base_name = university_name
result.add(base_name)