【问题标题】:Index of a list item that occurs multiple times多次出现的列表项的索引
【发布时间】:2019-10-21 18:47:16
【问题描述】:

我有以下代码

items = ['a', 'a', 'b', 'a', 'c', 'c', 'd']
for x in items:
    print(x, end='')
    print(items.index(x), end='')
## out puts: a0a0b2a0c4c4d6

我知道 python 会找到要索引的列表中的第一项,但我是否有可能得到 a0a1b2a3c4c5d6 的输出? 继续使用 for 循环对我来说是最佳选择,因为我将编辑列表。 编辑:我用 c 索引打错了

【问题讨论】:

  • 编辑列表(如添加/删除) - 当它被遍历时 - 不要这样做
  • 使用enumerate同时获取索引和值。或使用range(len(lst)) 压缩您的列表
  • @RomanPerekhrest 您可以更改列表值。您不能删除或添加项目,同意
  • 添加索引不会为您的数据添加太多信息。如果需要,请考虑使用元组,而不是字符串
  • 为什么还要输出c4c4

标签: python list indexing


【解决方案1】:

如果你真的想在一行中完成:

编辑 - 使用 .format 或格式字符串使这更短/更清晰,如 cmets 中所述

items = ['a', 'a', 'b', 'a', 'c', 'c', 'd']
print("".join("{}{}".format(e,i) for i,e in enumerate(items)))

对于 Python 3.7 你可以这样做

items = ['a', 'a', 'b', 'a', 'c', 'c', 'd']
print("".join(f"{e}{i}" for i, e in enumerate(items)))

原创

items = ['a', 'a', 'b', 'a', 'c', 'c', 'd']
print("".join((str(e) for item_with_index in enumerate(items) for e in item_with_index[::-1])))

请注意,需要反转 (item_with_index[::-1]),因为您希望在索引之前打印项目,但 enumerate 首先给出带有索引的元组。

【讨论】:

  • "".join("{}{}".format(e,i) for i,e in enumerate(items)) 更短
  • 没错,虽然第一个 in 应该是 for
  • 正确,已修复.... 也可以"".join("{1}{0}".format(*t) for t in enumerate(items))。这可能会一直持续下去
  • 那么您的代码更短但更易读?对于大多数新程序员来说,这样的一行代码非常混乱且不可读。
  • @b_c 是的。我想我认为,如果您打算用一个衬里回答,那么解释每个部分可能会有所帮助,因为对于大多数不使用它们的人来说,它们比带有 if 语句的 for 循环更难掌握。许多这些简单的问题都是由新手和没有经验的人提出的。
【解决方案2】:

我认为您正在寻找 a0a1b2a3c4c5d6 代替。

for i, x in enumerate(items):
    print("{}{}".format(x,i), end='')

【讨论】:

    【解决方案3】:

    当您遍历列表时,不要在列表中添加或删除项目。如果要指定输出,可以使用enumerate 获取列表的项目和索引。

    items = ['a', 'a', 'b', 'a', 'c', 'c', 'd']
    for idx, x in enumerate(items):
        print("{}{}".format(x, idx), end='')
    # outputs a0a1b2a3c4c5d6
    

    【讨论】:

    • 您的第一组括号是不需要的,并且您与+ 连接而不是format()。我会从(idx, x) 中删除括号以使其更干,并注意+ 已被format() 弃用。
    • 快到了。您可以删除str() 以及格式处理转换。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-12
    • 2018-12-15
    • 1970-01-01
    • 1970-01-01
    • 2014-04-11
    • 1970-01-01
    • 2020-10-29
    相关资源
    最近更新 更多