鉴于以下列表:
$('.delete').on('click', function(e) {
var $this = $(this);
$this.parent().remove();
//how to get the <tr> that just deleted
alert("deleted" +tr-value-deleted);
});
我想首先找到#
的特定行例如:#923
然后打印所有以*为前缀的数字,直到下一次出现以#。
开头的行这是我尝试的但是它不起作用:
#123
*21
*23
*56
*1
*3
#923
*21
*23
*56
*1
*3
#165
...
它打印*并打开以#开头的行,但问题是它从第一行开始而不是从包含#923的行开始。
我将不胜感激任何帮助和提示!
答案 0 :(得分:4)
您可以使用itertools.dropwhile
删除行,直到找到您想要的行然后循环,直到您得到以#
开头的行
from itertools import dropwhile
def section(fle, start, stop):
with open(fle) as f:
# consume lines until we get to our start line
drop = dropwhile(lambda x: x.strip() != start, f)
# skip start
next(drop, "")
# loop starting at line after start line
for line in drop:
# if we reach stop line break
if line.startswith(stop):
break
# else we just yield the line
yield line.rstrip()
输出:
In [4]: list(section("in.txt", "#923", "#"))
Out[4]: ['*21', '*23', '*56', '*1', '*3']
从开始开始处理多个部分,并以#
开头的行分隔:
from itertools import dropwhile, groupby
def section(fle, start, end):
with open(fle) as f:
grps = groupby(dropwhile(lambda x: x.strip() != start, f),
key=lambda x: x.startswith(end))
for k, v in grps:
if not k:
yield list(map(str.strip,v))
演示:
n [13]: cat in.txt
(4.471719725275173E-003,2.163649191486555E-002)
(6.471719725275173E-003,2#123
*21
*23
*56
*1
*3
#923
*21
*23
*56
*1
*3
#165.163649191486555E-002)
*210
*230
*560
*10
*30
#165.163649191486555E-002)
In [14]: list(section("in.txt", "#923", "#"))
Out[14]: [['*21', '*23', '*56', '*1', '*3'], ['*210', '*230', '*560', '*10', '*30']]
答案 1 :(得分:1)
也许是这样的:
data = ( "#123", "*21", "*23", "*56", "*1", "*3", "#923", "*21", "*23", "*56", "*1", "*3", "#16a" )
for idx,num in enumerate(data):
if num == "#923":
break
#
#
for num in data[idx + 1:]:
if num[0] == '#':
break;
#
print num
#
给出:
*21
*23
*56
*1
*3
答案 2 :(得分:1)
不需要让事情变得更复杂。只需使用两个for
循环:
with open(yourFile) as fp:
for line in fp:
if line.startswith('#923'):
break
for line in fp:
if line.startswith('#'):
break
if line.startswith('*'):
print line
如果您的数据已经是一个列表,那么:
it = iter(yourList)
for line in it:
if line.startswith('#923'):
break
for line in it:
if line.startswith('#'):
break
if line.startswith('*'):
print line
答案 3 :(得分:0)
请注意,在找到#923之前不要抑制输出,也不测试它。因此,您将获得您找到的第一个#。
请注意,您的for循环显示for i in data:
,其中包含第一行。您需要有一个标志来确定这是第一次还是第二次。请注意,第一次进入循环时,您测试的第一个条目是#条目,因此您将中断。
你应该做什么(而不是休息)是创建一个新的歌曲列表,每次你获得新的#条目。将每首*歌曲附加到列表中。然后你会得到一起合唱的歌曲列表。
你知道你将歌曲视为一个字符串,你从来没有初始化它所以添加到字符串songs += ndata[0] = "\n
将会失败。
此外,数据中的最后一行是#(最后会创建一个空歌曲列表)?如果您只是添加一个字符串,它将自行退出。
如果你想每次都做一个单独的歌曲列表,请使用带有yield而不是返回歌曲列表(或字符串)的生成器