Python 将列表值合并为一个字符串
我有这样的清单:Python 将列表值合并为一个字符串,python,Python,我有这样的清单: subsets = ["T10", "T12", "T13", "A15", "T23"] 我需要在这个列表中循环检查T,然后是A,如果发现它合并了T&A,即 这是我需要的新列表: newset = ["T10", "T12", "T13, A15", "T23"] 我试图找出如何循环遍历列表并检查最左边的值。我只需要{下一个列表项的字符串的左字符}的表达式-我想 for i in range(len(subsets)): if {left char of string
subsets = ["T10", "T12", "T13", "A15", "T23"]
我需要在这个列表中循环检查T,然后是A,如果发现它合并了T&A,即
这是我需要的新列表:
newset = ["T10", "T12", "T13, A15", "T23"]
我试图找出如何循环遍历列表并检查最左边的值。我只需要{下一个列表项的字符串的左字符}的表达式-我想
for i in range(len(subsets)):
if {left char of string for next list item} = "A":
newset.append(subset[i]+", "+ subset[i+1])
i+=1
else:
newset.append(subset[i])
下面是一个简单的
for loop
方法,它返回一个新列表:
f = []
for item in subsets:
if f and (item[:1], f[-1][:1]) == ('A', 'T'):
f[-1] = '{}, {}'.format(f[-1], item)
else:
f.append(item)
print(f)
['T10', 'T12', 'T13, A15', 'T23']
it = iter(subsets)
result = [next(it)]
for elem in it:
if elem[:1] == 'A' and result[-1][:1] == 'T':
# preceding element is T.., this is A.., combine into a single string
result[-1] = f'{result[-1]}, {elem}'
else:
result.append(elem)
下面是一个简单的
for loop
方法,它返回一个新列表:
f = []
for item in subsets:
if f and (item[:1], f[-1][:1]) == ('A', 'T'):
f[-1] = '{}, {}'.format(f[-1], item)
else:
f.append(item)
print(f)
['T10', 'T12', 'T13, A15', 'T23']
it = iter(subsets)
result = [next(it)]
for elem in it:
if elem[:1] == 'A' and result[-1][:1] == 'T':
# preceding element is T.., this is A.., combine into a single string
result[-1] = f'{result[-1]}, {elem}'
else:
result.append(elem)
从项目中创建一个新列表,并检查列表中的最后一个项目是否以
T
开头,当前项目是否以a
开头。如果是,请替换新列表中的最后一项:
f = []
for item in subsets:
if f and (item[:1], f[-1][:1]) == ('A', 'T'):
f[-1] = '{}, {}'.format(f[-1], item)
else:
f.append(item)
print(f)
['T10', 'T12', 'T13, A15', 'T23']
it = iter(subsets)
result = [next(it)]
for elem in it:
if elem[:1] == 'A' and result[-1][:1] == 'T':
# preceding element is T.., this is A.., combine into a single string
result[-1] = f'{result[-1]}, {elem}'
else:
result.append(elem)
我使用iter()
和next()
有效地用第一个元素填充输出列表,并且省去了测试result
是否至少有一个元素的麻烦
演示:
注意:这也会将连续的
A*
元素合并到前面的T
元素中,因此[…,“T13”,“A15”,“A16”,“T17”,…]
会导致[…,“T13,A15,A16”,“T17”,…]
从您的项目构建一个新列表,并检查该列表中的最后一个项目是否以T
开头,而电流为A
。如果是,请替换新列表中的最后一项:
f = []
for item in subsets:
if f and (item[:1], f[-1][:1]) == ('A', 'T'):
f[-1] = '{}, {}'.format(f[-1], item)
else:
f.append(item)
print(f)
['T10', 'T12', 'T13, A15', 'T23']
it = iter(subsets)
result = [next(it)]
for elem in it:
if elem[:1] == 'A' and result[-1][:1] == 'T':
# preceding element is T.., this is A.., combine into a single string
result[-1] = f'{result[-1]}, {elem}'
else:
result.append(elem)
我使用iter()
和next()
有效地用第一个元素填充输出列表,并且省去了测试result
是否至少有一个元素的麻烦
演示:
注意:这也会将连续的
A*
元素合并到前面的T
元素中,因此[…,“T13”,“A15”,“A16”,“T17”,…]
导致[…,“T13,A15,A16”,“T17”,…]
for循环中的i+=1
恐怕无法工作。下一次迭代,i
再次设置为range
给定的值,因此您丢失了增量。您需要一个while
循环来执行此操作。如果有两个连续的a
元素,会发生什么情况?例如,[…,“T13”,“A15”,“A16”,“T17”,“…]
?是否忽略A16
,或者将其与T13、A15
组合?恐怕for
循环中的i+=1
不起作用。下一次迭代,i
再次设置为range
给定的值,因此您丢失了增量。您需要一个while
循环来执行此操作。如果有两个连续的a
元素,会发生什么情况?例如,[…,“T13”,“A15”,“A16”,“T17”,“…]
?是否忽略了A16
,或者将其与T13、A15
组合?使用join
组合两个项目是过分的<代码>上一个+”,“+项快得多<代码>加入在同时有许多项要合并时效率更高。在这里,如果有很多字符串要组合,您只需对join
进行多个调用,而不是单个调用。与其使用startswith
,不如只使用item[:1]='A'和prev[:1]='T',甚至(item[:1],prev[:1])==('A',T')
@chepner:和f{prev},{item}
会更快。接下来,您实际上不需要prev
。只需使用f[-1]
@MartijnPieters啊,我忘了计时。使用join
组合两个项目太过分了<代码>上一个+”,“+项
快得多<代码>加入
在同时有许多项要合并时效率更高。在这里,如果有很多字符串要组合,您只需对join
进行多个调用,而不是单个调用。与其使用startswith
,不如只使用item[:1]='A'和prev[:1]='T',甚至(item[:1],prev[:1])==('A',T')
@chepner:和f{prev},{item}
会更快。接下来,您实际上不需要prev
。只要使用f[-1]
@MartijnPieters啊,我忘了计时了。