2015-08-15 3 views
-1

У меня есть набор из двух значений, называемых mySet. Это выглядит примерно так:Проверьте, находятся ли два элемента в наборе в элементе списка

mySet = {1010101, 20202030} 

И у меня есть список myList, который содержит по четыре строки. Строка в списке выглядит примерно так:

1 1010101 20202030 15.3 

с каждой из четырех строк, разделенных одним пространством. Я хотел бы построить цикл, где, если оба значения в mySet содержатся в одной строке myList, цикл вернет TRUE. У меня есть идея, что, возможно, я мог бы создать новый список только второго и третьего элементов каждой строки myList, а затем проверить значения из mySet против этого, но я не уверен, как это реализовать. Спасибо заранее за ваше время.

+4

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

+1

Кроме того: 'mySet = ([1010101, 20202030])' создает список (из скобок '[]'; скобки ничего не делают), а не набор. Возможно, вы забыли 'set', как в' set ([1010101, 20202030]) ', хотя' {1010101, 20202030} 'также будет работать. – DSM

+1

Является ли каждая строка строкой? Если ваша проблема в том, что вы не знаете, как извлечь четыре подстроки, посмотрите на str.split. Введите 'help (str.split)' в оболочке. – saulspatz

ответ

1

Если «возвращение» означает функцию (или любое вызываемое), вам необходимо сделать это отдельно, несмотря на цикл for, потому чтоПетлиничего не возвращают.

Однако, эта проблема может быть легко решена с встроенными any и all функции, как это:

mySet = {str(i) for i in {1010101, 20202030}} 
myList = ["1 1010101 20202030 15.3"] 

result = any(all(s in l for s in mySet) for l in myList) 

print(result) 

Он будет печатать True. Мы выполнили все вычисления в одной строке. Также обратите внимание, как я преобразовал все целые числа в строки в mySet - вы можете сделать это отдельно в другом наборе, если вы не хотите мутировать этот набор.

1
for line in myList: 
    print(mySet.issubset(map(float, line.split(" ")))) 

split для преобразования разделенных пробелами значений в список

map преобразовать все элементы списка, чтобы поплавки для сравнения

issubset (или, что эквивалентно issuperset), чтобы проверить, является ли один является subset другого