【问题标题】:Convert list of strings to numbers but maintain whitespace - Python将字符串列表转换为数字但保留空格 - Python
【发布时间】:2021-02-21 16:34:59
【问题描述】:

我正在尝试将这个字符串列表arr = c zza abb baa acd b ca zzz zr il 转换为数字,我确实这样做了,但是我将它们加入到一个列表中,这不是我想要的。我希望他们保持原来的结构(子字符串之间有空格)。如果我运行这个:

a = []
for char in arr:                       # is the issue here because I'm iterating over each char?
    number = ord(char.lower()) - 96
    a.append(number)                   # what do I change here, when appending, to keep the space?

我得到:[3, -64, 26, 26, 1, -64, 1, 2, 2, -64, 2, 1, 1, -64, 1, 3, 4, -64, 2, -64, 3, 1, -64, 26, 26, 26, -64, 26, 18, -64, 9, 12],它将空格转换为-64,所以如果我运行它,我会删除-64

a = [x for x in a if x != -64]

它返回:[3, 26, 26, 1, 1, 2, 2, 2, 1, 1, 1, 3, 4, 2, 3, 1, 26, 26, 26, 26, 18, 9, 12]

但是我仍然将它们放在一组中,而不是保持它们原来的空间分隔。总的来说,我需要对每组字符串进行排序,但不使用sorted().sort(),同时维护它们的子字符串组。所以我不需要保留空格并对子字符串进行排序(当它们是数字形式时)。

【问题讨论】:

  • 为什么不直接对每组字符进行排序呢?
  • 你想要的最终结果是什么?
  • 我想要c zza abb baa acd b ca zzz zr il -> abb acd b baa c ca il zr zza zzz
  • 我正在从文件中读取,需要将它们转换为int并对其编号进行排序,然后将其转换回str,然后推送到输出文件。与仅使用内置的 sorted().sort()

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


【解决方案1】:

您根本不必转换为整数,即可对每组字符进行排序:

>>> s = "c zza abb baa acd b ca zzz zr il"
>>> " ".join("".join(sorted(grp)) for grp in s.split())
'c azz abb aab acd b ac zzz rz il'

或者,如果您的意思是对组本身进行排序:

>>> " ".join(sorted(s.split()))
'abb acd b baa c ca il zr zza zzz'

【讨论】:

  • 当他们是['c', 'zza', 'abb', 'baa', 'acd', 'b', 'ca', 'zzz', 'zr', 'il'] 而不是像第一个例子中那样的一个字符串时呢?但是,是的,我想对每个子组进行排序,就像你在底部所做的那样。
  • @Christian 然后将s.split() 替换为l,其中l 是您刚刚发布的列表。所以只需" ".join(sorted(l))
猜你喜欢
  • 2014-02-09
  • 1970-01-01
  • 2014-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多