首页 > 解决方案 > 将字符串列表转换为数字但保留空格 - Python

问题描述

我正在尝试将此字符串列表转换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()or .sort(),同时维护它们的子字符串组。所以我不需要保留空格并对子字符串进行排序(当它们是数字形式时)。

标签: pythonpython-3.xstringlist-comprehension

解决方案


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

>>> 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'

推荐阅读