根据另一个列表中的数据创建列表

时间:2019-01-31 18:01:32

标签: python python-3.x

我已经创建了一个列表

a=[1,2,3,4,5]*100

我现在需要创建另一个列表,其中将包含a中的前8个素数位置。

我尝试了这两行代码,但是它们没有起作用

b=a[2:3:5:7:11:13:17:19]
a[2:3:5:7:11:13:17:19]=b

列表A的输出为“ [1、2、3、4、5、1、2、3、4、5、1、2、3、4、5、1、2、3、4、5 ,1、2、3、4、5、1、2、3、4、5、1、2、3、4、5、1、2、3、4、5、1、2、3、4、5 ,1、2、3、4、5、1、2、3、4、5、1、2、3、4、5、1、2、3、4、5、1、2、3、4、5 ,1、2、3、4、5、1、2、3、4、5、1、2、3、4、5、1、2、3、4、5、1、2、3、4、5 ,1、2、3、4、5、1、2、3、4、5、1、2、3、4、5、1、2、3、4、5、1、2、3、4、5 ,1、2、3、4、5、1、2、3、4、5、1、2、3、4、5、1、2、3、4、5、1、2、3、4、5 ,1、2、3、4、5、1、2、3、4、5、1、2、3、4、5、1、2、3、4、5、1、2、3、4、5 ,1、2、3、4、5、1、2、3、4、5、1、2、3、4、5、1、2、3、4、5、1、2、3、4、5 ,1、2、3、4、5、1、2、3、4、5、1、2、3、4、5、1、2、3、4、5、1、2、3、4、5 ,1、2、3、4、5、1、2、3、4、5、1、2、3、4、5、1、2、3、4、5、1、2、3、4、5 ,1、2、3、4、5、1、2、3、4、5、1、2、3、4、5、1、2、3、4、5、1、2、3、4、5 ,1、2、3、4、5、1、2、3、4、5、1、2、3、4、5、1、2、3、4、5、1、2、3、4、5 ,1、2、3、4、5、1、2、3、4、5、1、2、3、4、5、1、2、3、4、5、1、2、3、4、5 ,1、2、3、4 ,5、1、2、3、4、5、1、2、3、4、5、1、2、3、4、5、1、2、3、4、5、1、2、3、4 ,5、1、2、3、4、5、1、2、3、4、5、1、2、3、4、5、1、2、3、4、5、1、2、3、4 ,5、1、2、3、4、5、1、2、3、4、5、1、2、3、4、5、1、2、3、4、5、1、2、3、4 ,5、1、2、3、4、5、1、2、3、4、5、1、2、3、4、5、1、2、3、4、5、1、2、3、4 ,5、1、2、3、4、5、1、2、3、4、5、1、2、3、4、5、1、2、3、4、5、1、2、3、4 ,5、1、2、3、4、5、1、2、3、4、5、1、2、3、4、5、1、2、3、4、5、1、2、3、4 ,5、1、2、3、4、5、1、2、3、4、5、1、2、3、4、5、1、2、3、4、5、1、2、3、4 ,5]“,因此其在输出中的位置为2,3,5,7,11,13,17,19

2 个答案:

答案 0 :(得分:2)

a=[1,2,3,4,5]*100
indices = [2,3,5,7,11,13,17,19]
b  = []
for i in indices:
   b.append(a[i])
print(b)

您必须分别访问每个元素。 b=a[2:3:5:7:11:13:17:19] 在Python中语法上无效。实际上,这不是访问特定索引处的元素的方法。

使用List Comprehension进行相同操作的Pythonic方法(它将减少代码长度):

indices = [2,3,5,7,11,13,17,19]
b = [a[i] for i in indices]

答案 1 :(得分:0)

我会使用列表理解来尝试这种方式(请注意,test_prime方法根本没有优化):

def test_prime(n):
    if (n==1):
        return False
    elif (n==2):
        return True;
    else:
        for x in range(2,n):
            if(n % x==0):
                return False
        return True



a=[1,2,3,4,5]*100
b = [item for item in range(len(a)) if test_prime(a[item])]
b = b[0:8]

print b

其中输出(注的Python从0计数,所以阵列的第一个元素是0,并且不是1):

[1, 2, 4, 6, 7, 9, 11, 12]