как я могу разделить списки?я должен использовать Input.split (;)? - PullRequest
0 голосов
/ 14 апреля 2019

Я хочу получить ввод от пользователя в виде чисел через пробел или точку с запятой. Когда пользователь входит в список что-то вроде этого Lists: 1 3 4 2 1 2 1 3; 4 4 2 4 3 2 4 4 3 1 3 Я хочу, чтобы числа перед точкой с запятой были помещены в один список, а числа после точки с запятой были помещены в другой список. Таким образом, для ввода выше, мои два списка должны быть [1, 3, 4, 2, 1, 2, 1, 3] and [4, 4, 2, 4, 3, 2, 4, 4, 3, 1, 3]. Должен ли я попробовать разделить функцию? Моя цель - вернуть список со всеми элементами, которые встречаются несколько раз в порядке возрастания.

while True:

    original_string = input("Lists: ")
    if not original_string:
            exit()

    first_split = original_string.split(';')
    first_list, second_list = [elem.split(' ') for elem in first_split]

    print(first_list)
    print(second_list)
#how can returns the list of all the elements that occur multiple times in both lists and the return list should be in ascending order

Мой вывод должен выглядеть так

Lists: 1 3 4 2 1 2 1 3; 4 4 2 4 3 2 4 4 3 1 3

[2, 3]

Lists : 1 1 2 3 4 5; 2 3 4 5 6

[]

Lists : ;

[]

Lists:

Ответы [ 4 ]

0 голосов
/ 14 апреля 2019

Вы можете использовать выражения списка, такие как sorted(), split() и set(), чтобы получить желаемый результат, подобный следующему:

while True:

    original_string = input("Lists: ")
    if not original_string:
            exit()
    # get lists
    l1, l2 =  original_string.split(';')[0].split(), original_string.split(';')[1].split()
    # print lists
    print("l1: ", l1)
    print("l2: ", l2)
    # get occurences
    occurences_in_l1 = sorted(set([e for e in l1 if l1.count(e) > 1]))
    occurences_in_l2 = sorted(set([e for e in l1 if l2.count(e) > 1]))
    # print occurences
    print("sorted occurences l1: ", occurences_in_l1)
    print("sorted occurences l2: ", occurences_in_l2)

Выход:

Lists: 1 3 4 2 1 2 1 3; 4 4 2 4 3 2 4 4 3 1 3
l1:  ['1', '3', '4', '2', '1', '2', '1', '3']
l2:  ['4', '4', '2', '4', '3', '2', '4', '4', '3', '1', '3']
sorted occurences l1:  ['1', '2', '3']
sorted occurences l2:  ['2', '3', '4']
0 голосов
/ 14 апреля 2019

Попробуйте это:

list_of_lists = [[int(x) for x in lis.split()] for lis in input().split(';')]

Чтобы найти элементы, встречающиеся более одного раза, вы можете использовать это

    from collections import defaultdict
    dic = defaultdict(int)
    for ele in a_list:
        if dic[ele] == 1:
            print('a repeating element found')
        dic[ele] += 1
0 голосов
/ 14 апреля 2019

Попробуйте следующий код. Я добавил комментарии для лучшего понимания.

original_string = input("Lists: ")
splitted_input = original_string.split(';') # split the input string into two lists of String
list1 = [int(i) for i in splitted_input[0].split()] # convert first String (before semi-colon) into list of int
list2 = [int(i) for i in splitted_input[1].split()] # convert second String (after semi-colon) into list of int
l1 = list(set([x for x in list1 if list1.count(x) > 1])) # List of only repeated numbers in list1
l2 = list(set([x for x in list2 if list2.count(x) > 1])) # List of only repeated numbers in list2
l = l1 + l2
final_list = list(set([x for x in l if l.count(x) > 1])) # List of only repeated numbers in l
final_list_sorted = sorted(final_list) # sort the list in ascending order
print('Two lists before and after semi-colin are: ', list1, list2)
print('Two lists with only repeated numbers are: ', l1, l2)
print('Final list with repeated numbers in both the lists in an ascending order is: ', final_list_sorted)

Выход:

Lists: 1 3 4 2 1 2 1 3; 4 4 2 4 3 2 4 4 3 1 3
Two lists before and after semi-colin are:  [1, 3, 4, 2, 1, 2, 1, 3] [4, 4, 2, 4, 3, 2, 4, 4, 3, 1, 3]
Two lists with only repeated numbers are:  [1, 2, 3] [2, 3, 4]
Final list with repeated numbers in both the lists in an ascending order is:  [2, 3]


Lists: 1 1 2 3 4 5; 2 3 4 5 6
Two lists before and after semi-colin are:  [1, 1, 2, 3, 4, 5] [2, 3, 4, 5, 6]
Two lists with only repeated numbers are:  [1] []
Final list with repeated numbers in both the lists in an ascending order is:  []


Lists: ;
Two lists before and after semi-colin are:  [] []
Two lists with only repeated numbers are:  [] []
Final list with repeated numbers in both the lists in an ascending order is:  []
0 голосов
/ 14 апреля 2019

Вы можете выполнить первое разделение (определенное ;).
Затем как второе (определенное пробелом) для каждого элемента, определенного в первом разделении.

first_split = original_string.split(';')
first_list, second_list = [elem.split(' ') for elem in first_split]

Возможно, вы захотите выполнить некоторую обработку данных, например: преобразовать в целое число и удалить лишние пробелы или пустые элементы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...