Python - 如何根据列表B提取列表A中的数字?

时间:2017-03-14 18:19:29

标签: python list for-loop

我的目的是: 对于B中的每个元素,我想创建一个列表,其中包含列表B中的元素和列表A中的较小元素(比B元素)。

我尝试了两个for循环,但是,我不知道如何完成这项工作:

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]]

有什么建议吗?

6 个答案:

答案 0 :(得分:0)

试试这个:

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

答案 1 :(得分:0)

您是否尝试在其中一个循环中使用数组:

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)

答案 2 :(得分:0)

如果你想在一行中写这个:

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]]

答案 3 :(得分:0)

可以采用以下解决方案:

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

答案 4 :(得分:0)

您可以对一行操作使用过滤器和列表推导

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]]

答案 5 :(得分:0)

这是您的代码

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,