在将它们分成数字和非数字后,我无法从列表中发现所有重复项。请告诉我我做错了什么。
问题是,如果给我两条记录而不是3条
,则会产生以下引号datetime
Listy.txt - 外部数据来源
for x in good:
x = sorted(x)
if good.count(x) > 1:
good_dups.append(x)
解释
1,3,2,3
2,4,5,6
2,3,1
2,3,1
1,2,3
1,3,4,5
3,,4,5,6
1, 2, 3, 4. .,
123, 213, 12, ,
12. 122. 321
13 32 167
通过检查列表是否为数字,将列表拆分为好与错。
wrong = []
good = []
good_dups = []
wrong_dups = []
for n in content:
n = n.split(',')
if [k for k in n if not k.isdigit()]:
wrong.append(n)
else:
good.append(n)
print(("There are: "), len(good), ("error lines"))
for i, val in enumerate(good):
print('Error Syntax', *val, sep=" ")
print()
print(("There are: "), len(good), ("correct lines"))
for i, val in enumerate(good):
print('Error Syntax', *val, sep=" ")
print()
for x in good:
x = sorted(x)
if good.count(x) > 1:
good_dups.append(x)
print("There are: ", len(good_dups), " duplicates among ERROR lines:")
for i, val in enumerate(good_dups):
print('Error Syntax', *val, sep=" ")
print()
答案 0 :(得分:1)
您编写的以下代码无效。
good = [[1, 2, 3], [2, 3, 1]]
good_dups = []
for x in good:
x = sorted(x)
if good.count(x) > 1:
good_dups.append(x)
print(good_dups) # []
您正在计算good
中列表的排序副本数量,但如果原始子列表未排序,则list.count
将无法找到它们。
您可能想要做的是使用已排序的元组作为键来比较子列表,并在dict
或defaultdict
中跟踪它们。
from collections import defaultdict
good = [[1, 2, 3], [2, 3, 1], [2, 3, 4]]
good_dups = defaultdict(list)
for x in good:
good_dups[tuple(sorted(x))].append(x)
print(dict(good_dups)) # {(1, 2, 3): [[1, 2, 3], [2, 3, 1]], (2, 3, 4): [[2, 3, 4]]}
重复项是列表长度为2或更多的条目。