0
votes

Comment scinder les paires d'entiers-personnages en python

J'ai une liste, xxx

et j'essaie de déterminer le nombre de paires de caractères entier qu'il contient. Par exemple, 20W est une paire, tel quel 1R et 5k . J'ai essayé d'utiliser l'expression régulière \ d + [a-z] et cela identifie les paires, mais comment puis-je les diviser étant donné que l'entier peut être n'importe quelle longueur et la chaîne est toujours une lettre. Merci d'avance.


5 commentaires

Quels sont vos résultats attendus?


Avez-vous envisagé d'utiliser ^ et $ pour tester la chaîne complète à la fois


@ Praysonw.daniel J'aimerais obtenir le nombre total de paires en prenant la longueur de la liste des paires fendues.


@Chase Je suis tout à fait nouveau dans Regex, que font-ils?


Veuillez Modifier La question à inclure un exemple de la sortie attendue.


3 Réponses :


3
votes
20W 1 ['20W']
20W 1 ['20W']
20W 1 ['20W']
8W5K7W 3 ['8W', '5K', '7W']
8W5K7W 3 ['8W', '5K', '7W']
8W5K7W 3 ['8W', '5K', '7W']
8W5K7W 3 ['8W', '5K', '7W']
9W3K8W 3 ['9W', '3K', '8W']
7W7R6W 3 ['7W', '7R', '6W']
6W4R1Y4R5W 5 ['6W', '4R', '1Y', '4R', '5W']
6W1R1W5R1W1R5W 7 ['6W', '1R', '1W', '5R', '1W', '1R', '5W']
6W1R1W2R1Y2R1W1R5W 9 ['6W', '1R', '1W', '2R', '1Y', '2R', '1W', '1R', '5W']
6W1R1W5R1W1R5W 7 ['6W', '1R', '1W', '5R', '1W', '1R', '5W']
6W1R1W2R1Y2R1W1R5W 9 ['6W', '1R', '1W', '2R', '1Y', '2R', '1W', '1R', '5W']
9W3B8W 3 ['9W', '3B', '8W']
9W3B8W 3 ['9W', '3B', '8W']
9W3B8W 3 ['9W', '3B', '8W']
9W3B8W 3 ['9W', '3B', '8W']
9W3B8W 3 ['9W', '3B', '8W']
8W5N7W 3 ['8W', '5N', '7W']

0 commentaires

1
votes

Une autre doublure, mais sans groupe de fonctions et de boucles inutiles. Comme il s'agit toujours d'une lettre, ce que vous demandez vraiment est: "Combien de lettres y a-t-il?". Les chiffres ne comptent même pas à ce moment-là. La regex est également plus efficace et plus dynamique que la réponse similaire de @ronie. Si, pour une raison quelconque, les lettres sont également incluses minuscules, cela ne se cassera pas.

'''
76 pairs were found:

20W appears 3 times in positions [0, 1, 2] and is 3.95% of known values
8W appears 11 times in positions [3, 6, 9, 12, 17, 60, 63, 66, 69, 72, 73] and is 14.47% of known values
5K appears 4 times in positions [4, 7, 10, 13] and is 5.26% of known values
7W appears 6 times in positions [5, 8, 11, 14, 18, 75] and is 7.89% of known values
9W appears 6 times in positions [15, 58, 61, 64, 67, 70] and is 7.89% of known values
3K appears 1 times in positions [16] and is 1.32% of known values
7R appears 1 times in positions [19] and is 1.32% of known values
6W appears 6 times in positions [20, 21, 26, 33, 42, 49] and is 7.89% of known values
4R appears 2 times in positions [22, 24] and is 2.63% of known values
1Y appears 3 times in positions [23, 37, 53] and is 3.95% of known values
5W appears 5 times in positions [25, 32, 41, 48, 57] and is 6.58% of known values
1R appears 8 times in positions [27, 31, 34, 40, 43, 47, 50, 56] and is 10.53% of known values
1W appears 8 times in positions [28, 30, 35, 39, 44, 46, 51, 55] and is 10.53% of known values
5R appears 2 times in positions [29, 45] and is 2.63% of known values
2R appears 4 times in positions [36, 38, 52, 54] and is 5.26% of known values
3B appears 5 times in positions [59, 62, 65, 68, 71] and is 6.58% of known values
5N appears 1 times in positions [74] and is 1.32% of known values
'''


1 commentaires

Je pense que cela ajoutera 1 à cause de la lettre à la fin.



2
votes

1-liner + Importation:

import re

print(sum(len(re.findall("\\d+[A-Z]", i)) for i in x))  #76


6 commentaires

Merci pour votre réponse, cela fonctionne bien, que fait le deuxième \ au début de la regex?


Une barre oblique inverse (\) est un caractère spécial qui, lorsque combiner avec le caractère suivant crée une autre. \ n est équivalent à une nouvelle ligne. \\ signifie qu'il s'agit d'une barre oblique inverse.


Double Backslash est inutile si vous utilisez des guillemets simples.


@MichaelGuidry Où avez-vous eu ça? Les citations simples et doubles sont les mêmes en python. Correction: "Double Backslash est inutile si vous utilisez uniquement des chaînes brutes".


Voici une sortie interprète: >>> "\\ a" == '\ a' faux


Eh bien, votre réponse est la seule qui utilisait des guillemets doubles et la seule qui utilisait la double barreaux au dos. C'était une hypothèse - peut-être un mauvais.