2017-09-21 1 views
-5

Je suis passé par la poste Convert all strings in a list to intMéthode rapide de convertir toutes les chaînes dans une liste aux entiers

Je veux convertir

results = ['1', '2', '3'] 

à:

results = [1, 2, 3] 

Je sais que je peux faites-le par

  1. carte (int, résultats)

et

  1. résultats = liste (carte (int, résultats))

Je le veux plus rapide peut-être utiliser numpy ou plus rapide.

code actuel est

from sys import stdin, stdout 
import numpy as np 
n = int(stdin.readline()) 


for i in range(0,n): 
    lone = 0 
    m = int(stdin.readline()) 
    results = stdin.readline().split() 
    o = np.array(results, dtype=np.int64) 
    for j in range (0,m): 
     if o[j] in o[j+1:m]: 
      lone = lone +1 
     elif o[j] in o [0:j]: 
      lone = lone +1 
     else: 
      stdout.write(str(o[j]) + '\n') 

    if lone == m: 
     stdout.write ("-1 \n") 

S'il vous plaît laissez-moi savoir s'il y a des méthodes pour y parvenir en essayant de travailler avec des milliers de chaînes

+1

Qu'est-ce qui est si lent avec la méthode que vous avez ci-dessus? –

+0

lorsque je travaille sur plus de quelques milliers de chiffres, il faut plus de 6-7 secondes juste pour convertir ces nombres en entiers @BurhanKhalid –

+2

Etes-vous sûr que c'est la partie qui prend le temps? 6 - 7 secondes est une durée GÉANT pour une opération de conversion simple. Cela semble que vous avez un problème ailleurs. Pouvez-vous poster votre code de synchronisation? –

Répondre

2

multitraitement est un moyen pour le faire plus rapidement (en plus d'utiliser Numpy):

Exemples:

In [11]: from multiprocessing import Pool 

In [12]: pool = Pool(10) 

In [13]: pool.map(int, [str(i) for i in range(500)]) 

Numpy w La plupart du temps, vous obtiendrez un gain de mémoire car vous auriez affaire à des types primitifs au lieu d'objets python, mais vous obtiendrez également un gain de vitesse non négligeable. L'optimisation du temps d'une itération est toujours faite en utilisant la parallélisation, donc je conseille d'utiliser à la fois Numpy et un pool de processus.

+2

Aucun moyen est-ce que cela va être plus rapide que tout numpy, sauf si vous combinez probablement numpy avec cela, et même alors, vous verrez seulement des différences sur 1M éléments, éventuellement plus. Le multitraitement présente simplement trop de frais généraux pour être utile ici. –

+1

Je ne dis pas que les objets Python seront plus rapides que les primitives numpy. Je dis que les itérations sont mieux optimisées avec la parallélisation. Il vaut mieux utiliser les deux de toute façon. Et pour une très longue liste, la piscine gagnera à coup sûr. Je vais modifier pour refléter cette pensée. – Maresh