【问题标题】:Moving nth elements around to a specific nth element in a string in python?在python中将第n个元素移动到字符串中的特定第n个元素?
【发布时间】:2021-03-03 21:23:39
【问题描述】:

好的,所以我是 Python 新手,正在尝试远离 Java。

基本上我想将字符串的索引从0切换到1,现在切换到1到4,旧的第4到第5等等。

举个例子

string_msg = ['HBTUET'] 需要打印出['BUTTHE']

我该怎么做?

到目前为止我已经尝试过什么

string_msg = 'HBTUET'
lst = list(string_msg)
lst[::2], lst[1::2] = lst[1::2], lst[::2]
''.join(lst)
print(lst)

【问题讨论】:

  • 嗨,欢迎来到 Stackoverflow!你能分享一些你到目前为止尝试过的东西吗?
  • 我已经对其进行了编辑并发布了我迄今为止尝试过的内容

标签: python string for-loop


【解决方案1】:

您可以使用元组列表来表示索引交换,但您必须注意这些交换操作的顺序:

def strSwap(msg,swaps):
    chars = list(msg)
    for i,j in swaps: chars[i],chars[j] = chars[j],chars[i]
    return "".join(chars)

输出:

msg   = 'HBTUET'
swaps = [(0,1),(1,3),(3,5),(4,5)]    

strSwap(msg,swaps) # 'BUTTHE'


msg   = 'WRFLVEOO'
swaps = [(0,7),(1,2),(1,4),(2,3),(2,5)]

strSwap(msg,swaps) # 'OVERFLOW'


msg   = 'ESLHTYGOHOE'
swaps = [(0, 1), (0, 8), (2, 5), (4, 7), (6, 9), (6, 10)]

print(strSwap(msg,swaps)) # 'HEYHOLETSGO'

【讨论】:

    【解决方案2】:

    字符串是不可变的数据类型,因此您不能重新排列字符串中的字符。但是,您可以使用list() 函数将字符串转换为列表,重新排列项目,然后使用str.join() 方法将列表转换回字符串。

    我不确定切换字符的模式应该是什么,所以我只是切换了你提到的具体情况。

    string = "HBTUET"
    list_string = list(string)
    
    list_string[0], list_string[1] = list_string[1], list_string[0]
    list_string[1], list_string[4] = list_string[4], list_string[1]
    list_string[4], list_string[5] = list_string[5], list_string[4]
    
    new_string = "".join(list_string)
    

    显然,您必须重新排列索引分配语句以匹配所需的确切过程,但这是基本布局。

    如果你有预设的位置切换,那么使用for循环来切换所有指定的项目会很容易。

    string = "HBTUET"
    list_string = list(string)
    positions = [(0, 1), (1, 4), (4, 5)]
    
    for tup in positions:
        list_string[tup[0]], list_string[tup[1]] = list_string[tup[1]], list_string[tup[0]]
    
    mew_string = "".join(list_string)
    

    或者,如果有用于切换字符的特定模式,例如右移一位:

    string = "HBTUET"
    list_string = list(string)
    
    for i in range(len(list_string)-1):
        list_string[i], list_string[i+1] = list_string[i+1], list_string[i]
    
    new_string = ''.join(list_string)
    

    【讨论】:

    • 您好,这很完美,但是,我如何将它变成一个循环?假设我的字符太多,写出 list_string 的过程太长。有没有我可以做的循环,只需将每个 n 重新格式化为特定位置?例如,假设我们使用您的方法,并假设我增加了字符串中的数量,我将如何使其每第 n 个字符重复一次更改?
    • @hyeholestgo 如果您有多个值,我可以想到两个选项。 (1) 制作要切换的索引对的元组列表。确保项目正确排序,否则您可能会得到不同的字符串。然后,您可以遍历列表中的每个元组并执行list_string[tup[0]], list_string[tup[1]] = list_string[tup[1]], list_string[tup[0]] 之类的操作。 (2) 如果每个字符都被转置,你可以做list_string[i], list_string[i+1] = list_string[i+1], list_string[i](1) 将是我建议的方法。
    猜你喜欢
    • 1970-01-01
    • 2012-07-09
    • 1970-01-01
    • 1970-01-01
    • 2011-07-14
    • 2021-10-03
    • 2018-12-09
    • 2019-09-16
    • 2016-04-10
    相关资源
    最近更新 更多