【问题标题】:Add a number to a duplicated string in a list将数字添加到列表中的重复字符串
【发布时间】:2020-08-15 17:45:28
【问题描述】:

您好,我有一个值列表

ls = ["a", "a", "b", "b", "b", "b",  "c"]

如果我正确使用了该术语,我希望在重复项中添加一个枚举数。

基本上我想这样结束:

ls = ["a", "2a", "b", "2b", "3b", "4b",  "c"]

或者这个

ls = ["1a", "2a", "1b", "2b", "3b", "4b",  "1c"]

我只希望列表中的每个元素都是唯一的

【问题讨论】:

  • 如果你有这个{'b': 4, 'a': 2, 'c': 1} 你可以吗?你有什么尝试?
  • 这看起来是一个很好的练习,您遇到了任何具体的挑战吗?
  • 这里的列表代表了我正在处理的一个更大的列表。在这个较大的列表中,大约有 5000 个元素,其中一些元素重复了多次。所以我不知道哪些元素被重复或重复了多少次
  • 不要更改原始问题。这会破坏其他用户为回答您的问题所做的努力。

标签: python python-3.x string list


【解决方案1】:

这可能不是最有效的方法。

ls = ["a", "a", "b", "b", "b", "b",  "c"]

UniqueValues = set(ls)

for x in UniqueValues:
    number = 0
    for i in range(0,len(ls)):
        if ls[i] == x:
            number += 1
            if number >= 2:
                ls[i] += str(number)

但我们得到了你要找的东西

print(ls)
['a', 'a2', 'b', 'b2', 'b3', 'b4', 'c']

【讨论】:

    【解决方案2】:

    所以我们每次都需要检查完整列表,如果存在相同的值,我们可以更改指向值。

    ls = ["a", "a", "b", "b", "b", "b",  "c",'a','a']
    
    for index,value in enumerate(ls):
    
      if value in ls[index+1:]:
    
        for new in range(0,200000000):
          if not  f'{value}{new}' in ls:
            ls[index] = f'{value}{new}'
            break
    
    print(ls)
    

    输出:

    ['a0', 'a1', 'b0', 'b1', 'b2', 'b', 'c', 'a2', 'a']
    

    【讨论】:

    • 这很好用,谢谢,我如何修改它以将数字添加到字符串的开头?
    • 如果找到相同的值,我将更改当前索引值,您可以添加如果条件,如果在索引 n 找到相同的值,则更改该值而不是现有值
    【解决方案3】:

    您可以使用Counter 和unique 方法。

    from numpy import unique
    from collections import Counter
    
    ls = ["a", "a", "b", "b", "b", "b",  "c"]
    
    dup = dict(Counter(ls))
    l_uniq = unique(ls)
    print([key if i == 0 else key + str(i+1) for key in l_uniq for i in range(dup[key])])
    

    输出:

    ['a', 'a2', 'b', 'b2', 'b3', 'b4', 'c']
    

    【讨论】:

      猜你喜欢
      • 2020-09-14
      • 1970-01-01
      • 2012-12-15
      • 1970-01-01
      • 2018-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-30
      相关资源
      最近更新 更多