我试图提出一些建议,以便在以下每个字符串列表中找到子字符串“ angle”:
ListA = ['angle 45', 'color red', 'inside t']
ListB = ['angle 135', 'color blue', 'inside f']
ListC = ['above r', 'angle 315', 'color pink', 'inside o']
我需要添加几张支票
1)仅在所有3个列表中都存在“角度”
2)并且如果listA的“角度”值不等于listC的角度值,
然后获取listC的角度值,减去90,然后将新字符串放回列表中。 因此,listC现在看起来像:
ListC = ['above r', 'angle 225', 'color red', 'inside r']
我尝试在空白处分割这些列表以创建类似以下的列表:
['angle', '45', 'color', 'red', 'inside', 't']
但是,我很难遍历所有3个列表,然后进行后续检查,提取值并替换。 我想知道是否需要创建新的字典或列表才能完全实现这一目标。
更新 这就是我检查所有三个列表中的“ angle”,然后进一步拆分每个列表的内容。我还没有弄清楚的是,现在我已经将角度值与其分开了,我不确定如何检查listA的角度值不等于listB的角度。我还没有去拉取值,更新它并放回它。
if any("angle " in s for s in listA) and any("angle " in s for s in listB) \
and any("angle" in s for s in listC):
listASplit = []
for word in listA:
word = word.split(" ")
listASplit.extend(word)
listBSplit = []
for word in listB:
word = word.split(" ")
listBSplit.extend(word)
listCSplit = []
for word in listC:
word = word.split(" ")
listCSplit.extend(word)
答案 0 :(得分:3)
您在这里有很多事情要做,但是我同意在这里使用字典会更好。
首先,让我们分析列表
dictA = {}
for item in ListA:
row = item.split(" ")
dictA[row[0]] = row[1]
对每个列表执行相同的操作,然后可以比较字典的值而无需进一步循环。
if dictA['angle'] != to dictC['angle']:
...dostuff...
不要忘了在需要时强制转换为适当的类型
答案 1 :(得分:2)
lista = ['angle 45', 'color red', 'inside t']
listb = ['angle 135', 'color blue', 'inside f']
listc = ['above r', 'angle 315', 'color pink', 'inside o']
kw = 'angle'
results = []
for item in lista:
if kw in item:
results.append(item)
for item in listb:
if kw in item:
results.append(item)
for x in range(len(listc)):
if kw in item[x]:
results.append(item)
index = x
if int(results[0].split()[1]) != int(results[2].split()[1]):
lastindex = results[2].split()
listc[index] = lastindex[0]+' '+str(int(lastindex[1])-90)
for x in results:
print(x)
因此解释:
我添加了一个名为kw
的新变量,它只包含我们要搜索的关键字。
我还创建了一个名为results的空列表,用于存储匹配及其值。
当我们迭代listc
时,我们迭代列表的长度范围,以便我们可以提取索引(以后替换字符串)。
因此,我们检查所有列表中的关键字,并与append()
匹配results
此后,我们检查第一个和最后一个值不匹配。如果是这样,那么我们可以拆分从listc
提取的字符串,然后从值中减去90,然后再将其重新连接在一起并替换为listc
答案 2 :(得分:1)
error: Build input file cannot be found: '/Users/myUser/Documents/myAwesomeProject/node_modules/react-native/third-party/double-conversion-1.1.6/src/cached-powers.cc'
** BUILD FAILED **
The following build commands failed:
CompileC /Users/myUser/Documents/myAwesomeProject/ios/build/Build/Intermediates.noindex/React.build/Debug-iphonesimulator/double-conversion.build/Objects-normal/x86_64/cached-powers.o /Users/myUser/Documents/myAwesomeProject/node_modules/react-native/third-party/double-conversion-1.1.6/src/cached-powers.cc normal x86_64 c++ com.apple.compilers.llvm.clang.1_0.compiler
(1 failure)
[“在r上方”,“角度225”,“粉红色”,“在o内”]
答案 3 :(得分:1)
通过功能对您的工作进行分区:
def index_of_angle(lst):
for string in lst:
if string.startswith("angle"):
return lst.index(string)
# implicitly returns None if angle is not found
def get_angles(*lsts):
return [index_of_angle(lst) for lst in lsts]
现在这很容易理解:
a, b, c = get_angles(ListA, ListB, ListC)
if None not in [a, b, c]: # Check 1 is obvious
if ListA[a] != ListC[c]: # Check 2 is obvious
new_angle = int(ListC[c].split()[1]) - 90 # split by default is on spaces
ListC[c] = "angle %d" % new_angle
更明确地说,您可以将get_angles
重命名为get_angles_or_none
,以明确如果找不到角度,它会给出None
。
处理可能出现多个角度的输入(此输入应舍弃):
def index_of_angle(lst):
index_found = None
for string in lst:
if string.startswith("angle"):
if index_found is not None:
index_found = None # if multiple angles found, set return to None
break # if two angles found, no need to keep looking
index_found = lst.index(string)
return index_found # returns angle or None if not found/multiple
这将稍微慢一些,因为一旦找到角度我们就无法返回(必须确保首先不存在另一个角度输入)。
答案 4 :(得分:1)
对不起,我参加了布朗队的比赛,本来可以使您的生活更轻松:)
listd = [lista, listb, listc]
if 'angle' in ''.join(lista) and ''.join(listb) and ''.join(listc):
for idx, item, in enumerate(lista):
for x, i in enumerate(listc):
if 'angle' in item and 'angle' in i:
if item.split()[1] != i.split()[1]:
listc[x] = i.split()[0] + ' ' + str(int(i.split()[1]) - 90)
print(listd)
[['angle 45', 'color red', 'inside t'], ['angle 135', 'color blue', 'inside f'], ['above r', 'angle 225', 'color pink', 'inside o']]