【问题标题】:Check if an int/str is in the list and its location. Python 3.3.2检查 int/str 是否在列表中及其位置。 Python 3.3.2
【发布时间】:2013-09-16 21:34:49
【问题描述】:

假设我有一个看起来像这样的列表:

MyList = [1,2,3,4,5,"z","x","c","v","b"]

现在用户输入:“5z1b3”。您将如何将每个 int/str 替换为其在列表中的位置。我正在考虑使用这样的东西:

for x in MyList.... if located in list, replace with letter/number with its location.

虽然不完全确定该怎么做。非常感谢您的帮助。

edit::::: 这是我正在做的事情,我必须在列表中同时使用 int 和 strs。我也对我需要的输出撒了谎。感谢您提及它。输出中每个字母/数字之间的逗号将使它对我有用。任何想法如何做到这一点?

【问题讨论】:

  • 我不明白你的问题。您能否发布给定输入的预期输出?另外,您的伪代码中的the list 是什么?
  • 请注意,字符 "5" 不存在于列表中的任何位置。数字5 的事实无关紧要; "5" != 5 在 Python 中。
  • 输入为:5z1b3,无括号。我期望输出为:45092
  • 因此,如果MyList 中还有一个元素,例如在末尾添加"a",并且输入为5z1a3,您会期望450102?或者可能是十六进制的450A2?
  • 我真的怀疑你需要整数和字符串。听起来你想要'5' 而不是5。

标签: python list python-3.x


【解决方案1】:

使用列表推导:

[MyList.index(c) for c in inputstring]

这必须通过MyList 扫描每个条目;您可以通过使用从字符到位置的字典索引来优化它;这有一个额外的优势,我们可以确保我们也只有字符串:

index = {str(c): i for i, c in enumerate(MyList)}
[index[c] for c in inputstring]

如果您需要格式化字符串,请将索引转换为字符串并加入最终输出:

index = {str(c): str(i) for i, c in enumerate(MyList)}
','.join([index[c] for c in inputstring])

【讨论】:

  • 我可以看到多次出现某些c
  • @inspectorG4dget:在这种情况下,预期的行为会是什么?
  • 不,因为字典会覆盖到最后一次出现。我会使用包含 all 出现索引的列表/元组值。再说一次,我真的不知道 OP 的要求是什么——这个问题没有明确说明
  • @inspectorG4dget:但是 OP 要求列表中的 the 索引,而不是所有索引的列表。他的样本没有任何重复。如果你给他[3],而他后面的代码需要3,它会破坏后面的代码。如果你给他[3, 8],那就更糟了。
  • @inspectorG4dget:“我还对我需要的输出撒了谎……在输出中的每个字母/数字之间,它对我有用。”所以它是','.join(…)。
【解决方案2】:

我会使用 list.index() 方法。见下例:

MyList = [MyList.index(chr) for chr in user_input]

编辑: 然而,这假定来自用户输入的每个字符都将在 MyList 中找到,并且 MyList 中的每个字符只会出现一次。

【讨论】:

    猜你喜欢
    • 2011-07-21
    • 1970-01-01
    • 1970-01-01
    • 2013-09-23
    • 2019-08-27
    • 2018-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多