根据另一个列表中的模式匹配创建一个新列表
Create a new list based on pattern matching in another list
我有一个字符串列表,我想检查一个模式,如果模式匹配则将两个元素组合在一起并创建一个新列表。
例如,这是我的清单:
string_ = ["aBc", "ab","12abc55", "ABAB", "125"]
如何 - 如果列表中的第二项是字符串(内部没有数字)并且列表中的第三项是数字和字符的组合,那么我想将它们与 space之间。我的最终输出应该是:
["aBc", "ab 12abc55", "ABAB", "125"]
我试过以下方法:
def hasNumbers(inputString):
return bool(re.search(r'\d', inputString))
data = []
for i in range (0,len(string_)):
if string_[1].isalnum() and hasNumbers(string_[2]):
data.append(string_[1]+ " "+ string_[2])
else:
data.append(string_[i])
这没有给出预期的输出。
在这里用for循环遍历列表没有意义,因为你想做的操作只需要做一次。所以你不需要循环。您可以用这些替换 for 循环以获得预期的结果:
a,b,c,d = string_
if b.isalnum() and hasNumbers(c):
data = [a, b + ' ' + c, d]
else:
data = string_
我会复制整个列表,只有在满足条件时才更新它
对于第二个和第三个元素:
import re
string_ = ["aBc", "ab", "12abc55", "ABAB", "125"]
def hasNumbers(inputString):
return bool(re.search(r'\d', inputString))
data = string_.copy()
if data[1].isalnum() and hasNumbers(data[2]):
data[1] += f' {data.pop(2)}'
print(data)
['aBc', 'ab 12abc55', 'ABAB', '125']
如果您想使用循环,则需要使用 i
来读取列表的值:
import re
string_ = ["aBc", "ab", "12abc55", "ABAB", "125", "aBc", "ab", "12abc55", "ABAB", "125"]
def hasNumbers(inputString):
return bool(re.search(r'\d', inputString))
for i in range (0, len(string_)-1):
if string_[i].isalnum() and hasNumbers(string_[i+1]):
data.append(string_[i]+ " "+ string_[i+1])
else:
data.append(string_[i])
print(data)
输出:
['aBc', 'ab 12abc55', '12abc55', 'ABAB 125', '125', 'aBc', 'ab 12abc55', '12abc55', 'ABAB 125']
我有一个字符串列表,我想检查一个模式,如果模式匹配则将两个元素组合在一起并创建一个新列表。
例如,这是我的清单:
string_ = ["aBc", "ab","12abc55", "ABAB", "125"]
如何 - 如果列表中的第二项是字符串(内部没有数字)并且列表中的第三项是数字和字符的组合,那么我想将它们与 space之间。我的最终输出应该是:
["aBc", "ab 12abc55", "ABAB", "125"]
我试过以下方法:
def hasNumbers(inputString):
return bool(re.search(r'\d', inputString))
data = []
for i in range (0,len(string_)):
if string_[1].isalnum() and hasNumbers(string_[2]):
data.append(string_[1]+ " "+ string_[2])
else:
data.append(string_[i])
这没有给出预期的输出。
在这里用for循环遍历列表没有意义,因为你想做的操作只需要做一次。所以你不需要循环。您可以用这些替换 for 循环以获得预期的结果:
a,b,c,d = string_
if b.isalnum() and hasNumbers(c):
data = [a, b + ' ' + c, d]
else:
data = string_
我会复制整个列表,只有在满足条件时才更新它
对于第二个和第三个元素:
import re
string_ = ["aBc", "ab", "12abc55", "ABAB", "125"]
def hasNumbers(inputString):
return bool(re.search(r'\d', inputString))
data = string_.copy()
if data[1].isalnum() and hasNumbers(data[2]):
data[1] += f' {data.pop(2)}'
print(data)
['aBc', 'ab 12abc55', 'ABAB', '125']
如果您想使用循环,则需要使用 i
来读取列表的值:
import re
string_ = ["aBc", "ab", "12abc55", "ABAB", "125", "aBc", "ab", "12abc55", "ABAB", "125"]
def hasNumbers(inputString):
return bool(re.search(r'\d', inputString))
for i in range (0, len(string_)-1):
if string_[i].isalnum() and hasNumbers(string_[i+1]):
data.append(string_[i]+ " "+ string_[i+1])
else:
data.append(string_[i])
print(data)
输出:
['aBc', 'ab 12abc55', '12abc55', 'ABAB 125', '125', 'aBc', 'ab 12abc55', '12abc55', 'ABAB 125']