在python中,以不同索引同时切片列表
如何使用slice检查两个列表在特定索引处的值是否相同在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的
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
在逻辑上是不同的。第一个代码可能会引发索引器,而第二个代码会返回结果。