【问题标题】:get single index number of a duplicate element in a list获取列表中重复元素的单个索引号
【发布时间】:2021-03-10 03:37:42
【问题描述】:

我想把这个“RqaEzty”变成这个“R-Qq-Aaa-Eeee-Zzzzz-Tttttt-Yyyyyyy”。它基本上打印出一个字母的次数与它的索引一样多。 我创建了以下方法,但它有一个错误。 每次一个字母在输入中出现两次或更多时,我的输出都是错误的,因为我的代码采用与第一次出现的字母相同的索引和第二次出现的相同字母

例如“ZpglnRxqenU”应该是

“Z-Pp-Ggg-Lllll-Nnnnn-Rrrrrrr-Xxxxxxx-Qqqqqqqq-Eeeeeeeee-Nnnnnnnnnnn-Uuuuuuuuuuu” 但我明白了:

“Z-Pp-Ggg-Lllll-Nnnnn-Rrrrrrr-Xxxxxxx-Qqqqqqqq-Eeeeeeeee-Nnnnn-Uuuuuuuuuuu” 因为我的代码对第一个“n”和第二个“n”采用相同的索引

 def accum(s):
        x = list(s)
        s = ""
        for y in x:
            amount = 1 + (x.index(y))
            word = y * amount
            s += word.capitalize() + "-"
        s = s.rstrip('-')
        print(s)

我的想法是在“for 循环”中实现一个 if 函数来控制一个字母是否多次出现,如果是则输出第二个(或第三个或第四个...)字母的索引。

我的问题: 如何将重复的索引作为单个值输出?

【问题讨论】:

  • s 不需要转换成列表,python 字符串是可迭代的。

标签: python list loops arraylist indexing


【解决方案1】:

您可以迭代索引本身,而不是每次都查找索引:

for i in range(len(x)):
    y = x[i];
    amount = 1 + i
    word = y * amount
    s += word.capitalize() + "-"

【讨论】:

  • 一个更好的选择是使用 enumerate 内置函数,它用它的索引装饰值,所以 for i, y in enumerate(x): 会给你所有你需要的。
【解决方案2】:

您可以使用计数器变量代替 (x.index(y))

def accum(s):
        x = list(s)
        s = ""
        i=1 #change happens here
        for y in x:
            word = y * i #change happens here
            s += word.capitalize() + "-"
            i+1
        s = s.rstrip('-')
        print(s)

它会解决错误

【讨论】:

    【解决方案3】:

    如果你需要一个每一步都增加的值,你可以使用enumerate()

    然后就可以了。

    def accum(s):
        x = list(s)
        s = ""
        for idx, y in enumerate(x):
            amount = 1 + idx
            word = y * amount
            s += word.capitalize() + "-"
        s = s.rstrip('-')
        print(s)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-17
      • 1970-01-01
      • 2013-12-03
      • 2018-07-06
      • 1970-01-01
      • 2018-07-01
      相关资源
      最近更新 更多