打印出重复的python

时间:2018-05-29 14:00:08

标签: python python-3.x

在将它们分成数字和非数字后,我无法从列表中发现所有重复项。请告诉我我做错了什么。

问题是,如果给我两条记录而不是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 = []

在GOOD

中打印出重复数量
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()

在WRONG

中打印出重复数量
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()

1 个答案:

答案 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将无法找到它们。

解决方案

您可能想要做的是使用已排序的元组作为键来比较子列表,并在dictdefaultdict中跟踪它们。

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或更多的条目。

相关问题