Создайте список случайных целых чисел и затем поместите все одинаковые числа прямо рядом друг с другом. - PullRequest
0 голосов
/ 21 марта 2019
def run():
    lst=[]
    for i in range(0,20):
        ran = random.randint(1,10)
        lst.append(ran)
return lst

Пока что я создал список случайных целых чисел от 1 до 9 с 20 значениями, однако, как я могу включить метод обмена так, чтобы значения, которые являются одинаковыми, но не рядом друг с другом, были бы рядом друг с другом?

Спасибо

Ответы [ 4 ]

2 голосов
/ 21 марта 2019

Вы можете создать свои собственные критерии сортировки, используя индексы для аргумента key.

import random

def run():
    lst=[]
    for i in range(0,20):
        ran = random.randint(1,10)
        lst.append(ran)
    return lst

lst = run()
print(lst) 
#[5, 10, 5, 1, 8, 10, 10, 6, 4, 9, 3, 9, 6, 9, 2, 9, 9, 1, 7, 8]
result = sorted(lst, key = lambda x: lst.index(x))
print(result)
#[5, 5, 10, 10, 10, 1, 1, 8, 8, 6, 6, 4, 9, 9, 9, 9, 9, 3, 2, 7]
1 голос
/ 21 марта 2019

Возможно, просто отсортировать список:

lst = sorted(lst)

0 голосов
/ 21 марта 2019
import random

#this is the function you gave with little edits, to see the changes it make
# after the process

def run():
    lst=[]
    for i in range(0,20):
        ran = random.randint(1,10)
        lst.append(ran)
    print(lst)
    swap(lst)
    print(lst)
    return lst

#this uses indexes of every element, and checks every other element of the list.
#this swap function works for lists with element made up of strings as well.

def swap(lst):
    for i in range(len(lst)):
        nu_m=lst[i]
        x=i+1
        while x<len(lst):
            dump=i+1
            acc=lst[i+1]
            if(lst[i]==lst[x]):
                lst[dump]=lst[x]
                lst[x]=acc
            x=x+1
x=run()
0 голосов
/ 21 марта 2019

Сначала давайте создадим другой список, чтобы сохранить порядок уникальных чисел (например, set, но не отсортированных).

unsorted_set = []
for nb in lst:
    if nb not in unsorted_set:
        unsorted_set.append(nb)

Теперь, когда мы получили этот список, давайте создадимокончательный список, который будет продолжать этот список, но каждое число будет повторяться n раз, n - это числа числа в первом списке.Мы сделаем это с lst.count()

final_list = []
for nb in unsorted_set: 
    for _ in range(lst.count(nb)):
        final_list.append(nb)

Обратите внимание, что этот код можно значительно упростить с помощью Понимание списка .

...