【问题标题】:Python swapping sequence double digitsPython交换序列两位数
【发布时间】:2021-04-13 18:03:51
【问题描述】:

效果很好的代码示例

s="abc123"
swap_seq="103254"
swapped=''.join([s[int(i)] for i in swap_seq])
if s[0].isupper(): swapped.capitalize()
print (swapped)

但我有大量字符需要精确交换 18 个字符,只是想知道如何处理两位数

我试图让它工作的例子如下。

s="0123456789abcdefgh"
swap_seq="1 0 3 2 5 4 7 6 9 8 11 10 13 12 15 14 17 16"
swapped=''.join([s[int(i)] for i in swap_seq])
if s[0].isupper(): swapped.capitalize()
print (swapped)

试过 ["0", "1", "2"] 但是输入的长度必须完全相同,否则我会出错。

我想要做的是让用户输入最多 18 个字符的任何内容,代码将交换字母/数字。

【问题讨论】:

  • 你不能先做swap_seq = swap_seq.split()吗?这样它是一个列表而不是一个字符串,那么你的其余逻辑应该按预期工作

标签: python double swap digits


【解决方案1】:

我认为这是您想要的,没有尝试。我阅读您的代码的方式是,您正在使用swap_seq 中概述的序列对 s 进行索引,因此split 将为您提供位置列表和 i,而不是 swap_seq 中的每个可能字符,这包括空格,现在将是去掉空格的字符串列表。

swapped=''.join([s[int(i)] for i in swap_seq.split()])

【讨论】:

    【解决方案2】:

    swap_seq 不应该是字符串。这是一个索引值序列,所以使用更合适的数据类型,列出整数列表:

    swap_seq=[1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14, 17, 16]
    swapped=''.join([s[i] for i in swap_seq])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-01
      • 2022-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-23
      • 1970-01-01
      相关资源
      最近更新 更多