在python中,以不同索引同时切片列表

在python中,以不同索引同时切片列表,python,Python,如何使用slice检查两个列表在特定索引处的值是否相同 L1 = ['X00013', 9654123, 4.1, 'No', 'No', 1.83, 3.8, 0.01, 90.01] L2 = ['X00014', 2021230, 1.23, 'Yes', 'No', 1.86, 3.65, 0.15, 0.00001] 我知道怎么检查 if L1[3] == L2[3]: print("YES") 但我不知道如何同时检查多个位置/索引: 我在寻找类似于同时检查索引3、4和7的

如何使用slice检查两个列表在特定索引处的值是否相同

L1 = ['X00013', 9654123, 4.1, 'No', 'No', 1.83, 3.8, 0.01, 90.01]
L2 = ['X00014', 2021230, 1.23, 'Yes', 'No', 1.86, 3.65, 0.15, 0.00001]
我知道怎么检查

if L1[3] == L2[3]:
    print("YES")
但我不知道如何同时检查多个位置/索引:

我在寻找类似于同时检查索引3、4和7的两个列表的东西

我可以使用运算符和
itemgetter

itemgetter(3,4,7)(L1) ==  itemgetter(3,4,7)(L2)

但是我想要简单的直接解决方案切片列表。谢谢您的帮助。

您可以遍历所需索引的列表

places = (3, 4, 7)

if [L1[i] for i in places] ==     \
   [L2[i] for i in places]:
    print "YES"
else:
    print "NO"
当然,这将简化为一个简单的
(如果所有
),但上面的内容可能会帮助您理解逻辑

print all(L1[i] == L2[i] for i in places)

您可以通过一个基本循环和一些条件来实现这一点:

def check_places(L1, L2, places):
    for i in places:
        if i >= len(L1) or i >= len(L2) or L1[i] != L2[i]:
            return False

    return True
其工作原理如下:

>>> L1 = ['X00013', 9654123, 4.1, 'No', 'No', 1.83, 3.8, 0.01, 90.01]
>>> L2 = ['X00014', 2021230, 1.23, 'Yes', 'No', 1.86, 3.65, 0.15, 0.00001]
>>> places = (3, 4, 7)
>>> check_places(L1, L2, places)
False

切片必须是开始:停止:步骤,3,4,7不是。就我个人而言,我只需要编写一个普通的for循环,并为此逐个检查索引。或者,使用具有此功能的numpy数组。
如果(3,4,7)中的所有(L1[i]==L2[i]表示i):
?如果不进行切片,您可以使用
[i表示范围内的i(len(L1)),如果L1[i]==L2[i].
如果OP的目标是切片,我同意@wim(与重复问题相同)@MathiasEttinger这不会产生超出范围的元组索引吗?实际上使用
all
在逻辑上是不同的。第一个代码可能会引发
索引器,而第二个代码会返回结果。