Hey j'ai un projet où je génère des nombres aléatoires entre 1 et 4 49 fois et les ajoute à une liste. Ces chiffres sont censés représenter la couleur d'un smartie. Ensuite, j'ai dû séparer les résultats de cette liste en leurs propres listes, ce que j'ai également réussi à faire. Mais maintenant, il veut que je compare ces listes par longueur et que j'imprime le nom de la liste la plus longue et la plus courte. (Quelle couleur a le plus, et quelle couleur a le moins.) Voici ce que j'ai essayé. Je ne sais pas vraiment comment m'y prendre.



list = open('list.txt', 'w')
fields = None
redList = []
blueList = []
yellowList = []
greenList = []
biggestList = 0
smallestList = 0

for count in range(49):
    randNum = random.randint(1, 4)
    if randNum == 1:
        smartyColor = 'Red'
        list.write('1 ')

    elif randNum == 2:
        smartyColor = 'Blue'
        list.write('2 ')

    elif randNum == 3:
        smartyColor = 'Green'
        list.write('3 ')

    elif randNum == 4:
        smartyColor = 'Yellow'
        list.write('4 ')

list.close()

list = open('list.txt', 'r')
for line in list:
    fields = line.split()
for field in fields:
    if field == '1':
        redList.append(field)
    elif field == '2':
        blueList.append(field)
    elif field == '3':
        greenList.append(field)
    elif field == '4':
        yellowList.append(field)

if redList == blueList:
    print("There are as many red smarties as blue smarties.")
elif redList  == greenList:
    print("There are as many red smarties as green smarties.")
elif redList == yellowList:
    print("There are as may red smarties as yellow smarties.")

if blueList == greenList:
    print("There are as many blue smarties as there are green smarties.")
elif blueList == yellowList:
    print("There are as many blue smarties as yellow smarties.")

if greenList == yellowList:
    print("There are as many green smarties as there are yellow smarties.")

if redList > biggestList:
    biggestList = redList
elif blueList > biggestList:
    biggestList = blueList
elif greenList > biggestList:
    biggestList = greenList
else:
    biggestList = yellowList

print("The biggest list was ",biggestList,"." )

if redList < smallestList:
    smallestList = redList.Length
elif blueList < smallestList:
    smallestList = blueList
elif greenList < smallestList:
   smallestList = greenList
else:
   smallestList = yellowList

print("The smallest list was ",smallestList,"." )

-1
Ethan Myers 8 avril 2020 à 02:27

3 réponses

Meilleure réponse

Vous ne pouvez pas utiliser> avec 2 listes, ce que vous devez faire est le suivant:

Où vous avez:

if list_a > list_b:

Remplacer par:

if len(list_a)>len(list_b):
0
Bruno Mello 7 avril 2020 à 23:31

Votre question dans son essence est:

Étant donné un tas de listes, comment imprimer les plus petites et les plus grandes d'entre elles (par taille)?

Voici:

def print_biggest_and_smallest(mylists):
    mylists.sort(key = lambda x:len(x))
    smallest = mylists[0]
    biggest = mylists[-1]
    print(smallest, biggest)
0
nz_21 7 avril 2020 à 23:34
l = []
for i in range(49):
    l.append(random.randint(1,4))

colors = [[],[],[],[]]
for i in l:
        colors[int(i)-1].append(i)

length_colors= [len(i) for i in colors]
min, max = 0,0

for i in range(1,len(colors)):
    if length_colors[min] > length_colors[i]:
        min = i
    elif length_colors[max] < length_colors[i]:
        max = i

print(length_colors)
print("Biggest list = ", colors[max], ",with ", length_colors[max], " elements")
print("Smallest list = ", colors[min], "with ", length_colors[min], " elements")

Il serait utile que vous puissiez utiliser numpy, alors vous pouvez simplement utiliser np.argmax / np.argmin.

0
Jhtong 7 avril 2020 à 23:55