Python - Как извлечь числа в списке A в зависимости от списка B?

63
6

Моя цель: для каждого элемента в B я хочу создать список, в котором он содержит элементы списка B и меньшие элементы (чем элемент B) в списке A.

Я пробовал два для петель, однако, я не знаю, как закончить эту работу:

A=[1,2,3,4,5,6,7,8,9]
B=[3,4,5]
C=[]
for i in B:
for r in A:
if i>=r:
C.append(r)

Я ожидаю такого результата:

[[3,1,2,3],[4,1,2,3,4],[5,1,2,3,4,5]]

Какие-либо предложения?

спросил(а) 2021-01-19T11:47:58+03:00 6 месяцев, 1 неделя назад
1
Решение
119

Одним из решений может быть следующее:

try:
A = [1, 2, 3, 4, 5, 6, 7, 8, 9]
B = [3, 4, 5]
D = []
a = sorted(A)
for b in B:
temp = [b]
temp.extend(a[0: a.index(b) + 1])
D.append(temp)
print(D)
except ValueError as e:
pass # Do something when value in B not found in a

ответил(а) 2021-01-19T11:47:58+03:00 6 месяцев, 1 неделя назад
45

Вот ваш код


A=[1,2,3,4,5,6,7,8,9]
B=[3,4,5]
res=list()
for i in B:
C=list()
C.append(i)
for r in range(0,i):
C.append(A[r])
res.append(C)
print res,

ответил(а) 2021-01-19T11:47:58+03:00 6 месяцев, 1 неделя назад
45

Если вы хотите написать это в одной строке:

A=[1,2,3,4,5,6,7,8,9]
B=[3,4,5]
C=[[b] + [a for a in A if a <= b] for b in B]
print(C)

печать

[[3, 1, 2, 3], [4, 1, 2, 3, 4], [5, 1, 2, 3, 4, 5]]

ответил(а) 2021-01-19T11:47:58+03:00 6 месяцев, 1 неделя назад
46

Вы можете использовать фильтрацию и список для операции с одной строкой

print [[i]+filter(lambda x: x <= i, A) for i in B]

приводит к

[[3, 1, 2, 3], [4, 1, 2, 3, 4], [5, 1, 2, 3, 4, 5]]

ответил(а) 2021-01-19T11:47:58+03:00 6 месяцев, 1 неделя назад
46

Вы пытались использовать массив внутри одного из циклов:

A=[1,2,3,4,5,6,7,8,9]
B=[3,4,5]
C=[]
for b in B:
c = [b]
for a in A:
if a <= b:
c.append(a)
C.append(c)
print(C)

ответил(а) 2021-01-19T11:47:58+03:00 6 месяцев, 1 неделя назад
46

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

for i in B:
new_list = [i] # inner list starting with the elmt from B
for r in A:
if i >= r:
new_list.append(r) # append to inner list
C.append(new_list) # finally append inner list to C

ответил(а) 2021-01-19T11:47:58+03:00 6 месяцев, 1 неделя назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема