如何去除lis中整数的重复位数

2024-10-01 11:27:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这个单子

names = [ ["cat", 9112, "dog123", 5625], ["luck", 1232, "bad23"] ]

根据this question 我用这个代码做到了

^{pr2}$

输出-:[[9112, 5625], [1232]]


问题

现在我想删除这样的重复号码。

expected output -: [[912, 562], [123]]

我在用这个代码,但它不起作用

m = sorted(list(set(new)))
print(m)

错误-:

Traceback (most recent call last):    
   File "main.py", line 13, in <module>     
     m = sorted(list(set(new)))     
TypeError: unhashable type: 'list'

注意-:我只想保留第一个原始数字(例如-:1232需要变成123而不是132


Tags: 代码newnamesthislistcat号码单子
3条回答

下面是一个将整数转换为具有唯一数字的1的函数:

def to_uniq_digit_int(n):
      seen = set() # A set that collects seen digits
      result = 0
      for i in str(n): # A lazy way to iterate over digits in an integer
          if i not in seen:
              seen.add(i)
              # Since we are iterating from the most significant to the least significant, we can multiply the result by ten each time to move the integer one digit left
              result = result * 10 + int(i)
      return result

使用helper函数可能有助于提高代码的可读性。在

names = [ ["cat", 9112, "dog123", 5625], ["luck", 1232, "bad23"],["123"] ]
updated_name=[]
for n_list in names:
    undated_n_list=[]
    for n in n_list:
        if type(n)==int:
            new_str = []
            for digit in str(n):
                if digit not in new_str:
                    new_str.append(digit)
            undated_n_list.append(int("".join(map(str, new_str))))
    if undated_n_list:
        updated_name.append(undated_n_list)
print(updated_name)

输出:

^{pr2}$

它有点长,但希望它对你有用。在

列表是可变的;在Python中可变容器是不可散列的。set(names)需要对names的元素进行哈希排序,但是你的names列表的元素是列表(["cat", 9112, "dog123", 5625]和{}),因此,它不能转换为set。在

试试这个:

names = [ ["cat", 9112, "dog123", 5625], ["luck", 1232, "bad23"] ]

li = [[x for x in y if isinstance(x, int)] for y in names]
final = [["".join(sorted(set(str(x)), key=str(x).index)) for x in y] for y in li]
print(li)
print(final)

输出如下:

^{pr2}$

编辑:

这个解决方案将得到预期的结果。 这可能不是最佳的解决方案,OP也没有提到任何与性能有关的内容。在

相关问题 更多 >