Python – String inversa excepto puntuaciones

Dada una string con puntuaciones, realice la secuencia inversa, dejando las puntuaciones en sus lugares.

Entrada : test_str = ‘geeks@#for&%%gee)ks’ 
Salida : skeeg@#rof&%%ske)eg 
Explicación : toda la string está invertida, excepto los signos de puntuación.

Entrada : test_str = ‘geeks@#for&%%gee)ks’ [solo inversión de substrings] 
Salida : skeeg@#rof&%%eeg)sk 
Explicación : solo se invierten las substrings. 
 

Método n. ° 1: usar bucle + pila + puntuación + división()

En esto, usamos stack para realizar la inversión de strings, verificando la puntuación, si el carácter actual es uno, lo agregamos. El método de división se usa para manejar casos de espacios, que deben ignorarse mientras se invierte.

Python3

# Python3 code to demonstrate working of
# Reverse String except punctuations
# Using loop + stack + punctuation + split()
from string import punctuation
 
# initializing string
test_str = 'geeks# for&%% gee)ks'
 
# printing original string
print("The original string is : " + str(test_str))
 
# getting punctuations
punc_set = set(punctuation)
res = []
for sub in test_str.split(' '):
     
    # getting all alphabets
    alphas = [chr for chr in sub if chr not in punc_set]
    for chr in sub:
         
        # checking for punctuations
        if chr not in punc_set:
            res.append(alphas.pop())
            continue
        else:
            res.append(chr)
             
    # handling spaces
    res.append(' ')
res = "".join(res)
 
# printing result
print("The Reversed String ignoring punctuation : " + str(res))
Producción

The original string is : geeks#for&%%gee)ks
The Reversed String ignoring punctuation : skeeg#rof&%%ske)eg 

Método #2: Usar groupby() + isalnum() [para inversión específica de substring]

En esto, formamos una agrupación de cada una de las substrings entre puntuaciones y las invertimos entre ellas, no enteras. El isalnum() se usa para verificar todos los alfabetos.

Python3

# Python3 code to demonstrate working of
# Reverse String except punctuations
# Using groupby() + isalnum() [ for substring specific reversal ]
from itertools import groupby
 
# initializing string
test_str = 'geeks# for&%% gee)ks'
 
# printing original string
print("The original string is : " + str(test_str))
 
res = ''
 
# grouping all sections
for ele, sub in groupby(test_str, str.isalnum):
    sub = list(sub)
     
    # reversal on alphanumeric occurrence
    if ele:
        sub = sub[::-1]
         
    # joining all subparts
    res += ''.join(sub)
 
 
# printing result
print("The Reversed String ignoring punctuation [substring] : " + str(res))
Producción

The original string is : geeks#for&%%gee)ks
The Reversed String ignoring punctuation [substring] : skeeg#rof&%%eeg)sk

Publicación traducida automáticamente

Artículo escrito por manjeet_04 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *