【问题标题】:Accessing index of a string within a comprehension在理解中访问字符串的索引
【发布时间】:2021-12-06 21:47:15
【问题描述】:
>> names = ["Cola", "Salah"]  
>> names1 = [s for s in names for i,c in enumerate(s)]
Output: "Cola","Cola","Cola","Cola","Salah","Salah","Salah","Salah","Salah",

我正在尝试使用 python 理解,而不是输出 Cola 和 Salah 5 次,输出将是:

output: "Coolllaaaa", "Saalllaaaahhhhh"

我想知道我们将如何访问字符串的索引。 代码应该可以接受 unicode。

【问题讨论】:

  • 您的代码已经在访问索引 - 那是 i 变量。你现在只需要使用它(见下面的答案)

标签: python python-3.x string list list-comprehension


【解决方案1】:

这是一种使用enumerate 循环遍历字符串元素中的每个索引和字符的方法:

>>> names = ["Cola", "Salah"]
>>> [''.join([c * i for i, c in enumerate(s, 1)]) for s in names]
['Coolllaaaa', 'Saalllaaaahhhhh']

这使用了两个list理解,第一个循环遍历names中的每个字符串,第二个循环遍历字符串中的每个字符和索引,然后将这些值相乘并将它们连接成一个新的字符串。

【讨论】:

  • 没有理由打扰range; enumerate 可以传递start 索引的参数,它不必从0 开始。所以[''.join([c * i for i, c in enumerate(s, 1)]) for s in names] 工作得很好,它比zip+range 更快、更简单、更不脆弱(没有计算长度和调整range 偏移量)并且性能更高。
  • 是的,当我发现enumerate 可以传递一个起始索引时,我已经更新了我的答案。我将删除 zip+range 方法,因为我认为这在这里并不是最理想的。
猜你喜欢
  • 2019-05-28
  • 1970-01-01
  • 2012-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-08
相关资源
最近更新 更多