Προς το περιεχόμενο

Python δυο λιστες


thiva7

Προτεινόμενες αναρτήσεις

Καλησπερα ,

εχω μια function η οποια μου επιστρέφει αριθμους με αυτο το τροπο

[1,2,5,9,10,5] κλπ

και εχω αυτο

[1,2,5,9,10,5]= ["+" , "-"]

θελω να φτιαξω ενα str που να εχει τα [1,2,5,9,10,5] ανακατεμενα

1 + 2 - 5 - 9 + 10 - 5...

πως μπορω να το κανω αυτο?

 

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)

Για να κάνεις αυτό που θέλεις, πρέπει να παίρνεις ένα-ένα τα ψηφία από την πρώτη λίστα με τους αριθμούς και εναλλάξ να παίρνεις ένα σύμβολο από την λίστα με τα σύμβολα. 

Τι από τα αποπάνω σε δυσκολεύει; 

Επεξ/σία από DrKo
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)
1 ώρα πριν, thiva7 είπε

Καλησπερα ,

εχω μια function η οποια μου επιστρέφει αριθμους με αυτο το τροπο

[1,2,5,9,10,5] κλπ

και εχω αυτο

[1,2,5,9,10,5]= ["+" , "-"]

θελω να φτιαξω ενα str που να εχει τα [1,2,5,9,10,5] ανακατεμενα

1 + 2 - 5 - 9 + 10 - 5...

πως μπορω να το κανω αυτο?

 

Το μπλονταρισμενο ειναι λαθος.

Αν καταλαβα καλα, θελεις τα νουμερα της λιστας σε τυχια σειρα και με τυχαιο συμβολο αναμεσα τους.

Αν ναι, τοτε, μπορεις να κανεις κατι τετοιο:

l = [1,2,5,9,10,5]

import random

used=[]

nums = list(range(len(l)))

res=''

for i in range(len(l)):
  x = random.choice([k for k in nums if k not in used])
  res += str(l[x])
  used.append(x)
  if i < len(l)-1:
    res = res + ' ' + random.choice(['+', '-']) + ' '
    
print(res)

#'2 - 1 - 5 + 10 + 9 + 5'
#'1 + 10 - 2 + 5 - 5 - 9'
#'10 + 1 + 9 + 5 - 5 - 2'
#etc

 

Επεξ/σία από archer100
  • Thanks 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

3 ώρες πριν, archer100 είπε

Το μπλονταρισμενο ειναι λαθος.

Αν καταλαβα καλα, θελεις τα νουμερα της λιστας σε τυχια σειρα και με τυχαιο συμβολο αναμεσα τους.

Αν ναι, τοτε, μπορεις να κανεις κατι τετοιο:


l = [1,2,5,9,10,5]

import random

used=[]

nums = list(range(len(l)))

res=''

for i in range(len(l)):
  x = random.choice([k for k in nums if k not in used])
  res += str(l[x])
  used.append(x)
  if i < len(l)-1:
    res = res + ' ' + random.choice(['+', '-']) + ' '
    
print(res)

#'2 - 1 - 5 + 10 + 9 + 5'
#'1 + 10 - 2 + 5 - 5 - 9'
#'10 + 1 + 9 + 5 - 5 - 2'
#etc

 

Φίλε μου αυτό ακριβώς ήθελα. 

Σε ευχαριστώ πολύ 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Για την ιστορία μόνο, για να ανακατέψεις μία λίστα υπάρχει η shuffle. Οπότε γλυτώνουμε πολλές από τις παραπάνω πράξεις και μεταβλητές

def create_random_calcs(numbers, prajeis):
	result=''
	random.shuffle(numbers)
	for number in numbers:
		result+=str(number)
		result+=random.choice(prajeis)
	return result[:-1]

Παίρνει τα στοιχεία της ανακατεμένης λίστας ή ότι άλλο είναι και βάζει ανάμεσα μία τυχαία πράξη. Επιστρέφει το string εκτός το τελευταίο σύμβολο. Δεν λειτουργεί με αρνητικούς.

 

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)

Για την ιστορία, μπορεί να γίνει ως εξής:

>>> from random import shuffle, choice
>>> from heapq import merge
>>> from itertools import count
>>> 
>>> a = [1,2,5,9,10,5]
>>> shuffle(a)
>>> counter = count()
>>> list(merge(a, [choice(["+", "-"]) for _ in a], key=lambda _: next(counter)))[:-1]
[5, '-', 10, '-', 1, '-', 5, '-', 9, '-', 2]
>>> 

 

Ή, ακόμα πιο λιτά:

>>> from random import shuffle
>>> a = [1,2,5,9,10,5]
>>> shuffle(a)
>>> ''.join(list(map(lambda x: f"{x}{choice(['+', '-'])}", a)))[:-1]
'5-1-9+2-5-10'

 

Οπότε γλιτώνουμε όλα τα παραπάνω και γίνεται σε μία γραμμή, άντε δύο με το shuffle. 

Επεξ/σία από DrKo
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

1 ώρα πριν, DrKo είπε

Οπότε γλιτώνουμε όλα τα παραπάνω και γίνεται σε μία γραμμή, άντε δύο με το shuffle. 

Δεν έχει σημασία μόνο το μέγεθος 😆

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

12 ώρες πριν, DrKo είπε

Για την ιστορία, μπορεί να γίνει ως εξής:


>>> from random import shuffle, choice
>>> from heapq import merge
>>> from itertools import count
>>> 
>>> a = [1,2,5,9,10,5]
>>> shuffle(a)
>>> counter = count()
>>> list(merge(a, [choice(["+", "-"]) for _ in a], key=lambda _: next(counter)))[:-1]
[5, '-', 10, '-', 1, '-', 5, '-', 9, '-', 2]
>>> 

 

Ή, ακόμα πιο λιτά:


>>> from random import shuffle
>>> a = [1,2,5,9,10,5]
>>> shuffle(a)
>>> ''.join(list(map(lambda x: f"{x}{choice(['+', '-'])}", a)))[:-1]
'5-1-9+2-5-10'

 

Οπότε γλιτώνουμε όλα τα παραπάνω και γίνεται σε μία γραμμή, άντε δύο με το shuffle. 

Ωραια τα one-liners αλλα δεν ειναι τοσο βοηθητικα σε καποιον αρχαριο, μαλλον σαν κινεζικα φαινονται (map και lambda μαζι σε αρχαριο;;!!) .

Προσωπικα ειμαι φαν των one-liner αλλα καποιες φορες εχω φαει κραξιμο στο stackoverflow για τη μη αναγνωσιμοτητα του κωδικα και ομολογω πως καποιες φορες ειχαν δικιο. Επομενως, οι απλες και ευαναγνωστες λυσεις ειναι ισως προτιμοτερες για καποιον αρχαριο, ωστε να καταλαβαινει τι κανει ο κωδικας βημα-βημα

 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

1 ώρα πριν, archer100 είπε

Ωραια τα one-liners αλλα δεν ειναι τοσο βοηθητικα σε καποιον αρχαριο, μαλλον σαν κινεζικα φαινονται (map και lambda μαζι σε αρχαριο;;!!) .

Προσωπικα ειμαι φαν των one-liner αλλα καποιες φορες εχω φαει κραξιμο στο stackoverflow για τη μη αναγνωσιμοτητα του κωδικα και ομολογω πως καποιες φορες ειχαν δικιο. Επομενως, οι απλες και ευαναγνωστες λυσεις ειναι ισως προτιμοτερες για καποιον αρχαριο, ωστε να καταλαβαινει τι κανει ο κωδικας βημα-βημα

 

Δεν διαφωνώ, αλλά νόμιζα ότι εάν κάποιος μπορεί να καταλάβει τα one-liners, τότε δεν θα είχε πρόβλημα να καταλάβει ότι το:

13 ώρες πριν, DrKo είπε

Για την ιστορία, μπορεί να γίνει ως εξής

δείχνει πως αυτό που ακολουθεί δεν είναι για αρχάριο και δεν είναι καν σαν προτεινόμενη καλύτερη λύση για αναγνωσιμότητα.

 

Μάλλον έκανα λάθος. 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...