在两个列表列表中查找匹配的字符串
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在两个列表列表中查找匹配的字符串相关的知识,希望对你有一定的参考价值。
我试图创建一个函数,以便将'next'列表中的随机值分配给'One'和'Two'。如果分配给'One'和'Two'的值与'roundTwo'中值[i] [0]和[i] [2]的位置一致,则为'One'和'Two'分配新值。
然后,从“下一个”列表中删除值“1”和“2”。
例如,如果'one'被指定为'J090'而''two'被指定为'MA78',那么它们都将被赋予新的值,如'roundTwo'所示:
[اجوص0,ء1ء,أمحقئ,قضا]
但是,如果'one'被分配'J090'并且'two'被分配'B208'那么它将是正确的,然后程序将继续从'next'列表中删除'J090'和'B208'。
下面是我的代码示例,如果我写的内容在这里没有太多意义,请道歉,所以只要问你是否认为它需要编辑!
nextList = ['JO90', 'MA78', 'FE29', 'HT27', 'EQ37', 'BF50', 'LJ93', 'UT21', 'KJ40', 'WE82', 'WQ28', 'BV98', 'FE32', 'EF10', 'SA14', 'SP16']
roundTwo = [['JO90', '1', 'MA78', '8'], ['B208', '2', 'DF18', '3'], ['PD06', '5', 'BS07', '7'], ['SA14', '4', 'SP16', '7']]
one = nextList[random.randint(0, len(nextList) - 1)]
two = nextList[random.randint(0, len(nextList) - 1)]
for i in nextList:
if one in roundTwo[i][0] and two in roundTwo[i][2]:
one = roundTwo[random.randint(0, len(roundTwo) - 1)]
two = roundTwo[random.randint(0, len(roundTwo) - 1)]
if one in nextList:
nextList.remove(one)
if two in nextList:
nextList.remove(two)
我在运行时遇到此错误,我不太确定如何使其正常工作:
如果一个在roundTwo [i] [0]和两个在roundTwo [i] [2]:
TypeError:list indices必须是整数或切片,而不是str
谢谢!
因此,如果我已正确理解这一点,您的函数将执行以下操作:
- 从
nextList
随机取两个值 - 检查它们是否与
roundTwo
配对 - 检查结果:
如果它们不匹配,请从
nextList
中删除它们 如果匹配,请选择另外两个
但你真的只是选择另外两个吗?或者你的意思是回到第1步并重复直到你得到两个不匹配的?或者你不选择另外两个?
您的错误来自于循环nextList
以获取您的i
值(例如'JO90','MA78'),然后尝试在roundTwo
列表中查找这些作为索引。如果你想循环遍历roundTwo
中的所有4个小集合进行检查,那么你的脚本应该是这样的:
for item in roundTwo: # eg item = ['JO90', '1', 'MA78', '8']
if one == item[0] and two == item[2]:
# choose new one and two
如果他们匹配来自roundTwo
的一对,你的功能目前似乎试图从roundTwo
列表中以某种方式选择替代品,但我认为这是一个错字,应该是nextList
,但不知道你的功能正在做什么的更多细节我可以'说。
如果我能猜到你的算法应该做以下事情:
- 从
nextList
随机取两个值 - 检查它们是否与
roundTwo
配对 - 检查结果:
如果它们不匹配,请从
nextList
中删除它们 如果匹配,请重新开始步骤1。
然后这段代码应该工作:
import random
nextList = ['JO90', 'MA78', 'FE29', 'HT27', 'EQ37', 'BF50', 'LJ93', 'UT21', 'KJ40', 'WE82', 'WQ28', 'BV98', 'FE32', 'EF10', 'SA14', 'SP16']
roundTwo = [['JO90', '1', 'MA78', '8'], ['B208', '2', 'DF18', '3'], ['PD06', '5', 'BS07', '7'], ['SA14', '4', 'SP16', '7']]
while True:
# choose one and two at random
one = nextList[random.randint(0, len(nextList) - 1)]
two = nextList[random.randint(0, len(nextList) - 1)]
# loop over every set in roundTwo
for i in roundTwo:
# check whether one and two match
if one == i[0] and two == i[2]:
print "Bad pair: {0}, {1}".format(one, two)
# break out of for loop
# will hit end of while loop and start again
break
# got to end of for loop without breaking, so *didn't* match pair in roundTwo
else:
print "Good pair: {0}, {1}".format(one, two)
nextList.remove(one)
nextList.remove(two)
# we found a good pair, so can break out of the while loop
break
如果one
和two
同样出现,这将产生错误。如果您希望它们不同,您可以在选择后立即添加检查:
if one == two:
print "They're the same"
continue
continue
将跳回while
循环的开始。
或者如果你被允许拥有相同的,你需要在你删除它们之前添加一个检查它们是否在nextList
中(就像你在原始脚本中那样)但你只需要检查two
- 至少one
应该总是在列表中:
nextList.remove(one)
if two in nextList:
nextList.remove(two)
这使用了for
-else
构造:如果你完成了for
循环并且没有更快地完成它,那么Python将执行else
分支。这个else
分支包含一个break
语句,以摆脱while True
循环,否则将永远循环。如果您之前没有遇到while True
循环,或者else
分支在for
循环或break
语句:https://docs.python.org/2/tutorial/controlflow.html,我建议您阅读Python教程。
以上是关于在两个列表列表中查找匹配的字符串的主要内容,如果未能解决你的问题,请参考以下文章
我需要比较python中的2个嵌套列表以查找第一个列表的字符串与第二个列表中的字符串不匹配的位置
在 Python 中查找输入字符串到元组列表的所有可能匹配项(以任何顺序/顺序)
使用 Python 有效地查找部分字符串匹配 --> 从 5 GB 文件中的值列表开始的值