Нет метода списка, но нетрудно реализовать такую функцию: отсканируйте нужные индексы, а затем нарезайте их.
def strip_seq(predicate, xs):
def scan(xs):
return next((i for i, x in enumerate(xs) if not predicate(x)), 0)
return xs[scan(xs) : -scan(reversed(xs)) or None]
xs = ["0", "0", "a", "1", "0", "0", "1", "0", "b", "0", "0", "0"]
print(strip_seq(lambda x: x=='0', xs)) # ['a', '1', '0', '0', '1', '0', 'b']
Это должно работать с любыми типами последовательностей, включая строки и кортежи.
Это - то, серьезно испортил страницу, мудрую кодированием :-)
Нет ничего действительно неправильно с Вашим подходом вообще. Я был бы, вероятно, склонен делать преобразование прежде, чем передать его BeautifulSoup, просто потому что я - persnickity:
import urllib
html = urllib.urlopen('http://www.coopamerica.org/programs/responsibleshopper/company.cfm?id=271').read()
h = html.decode('iso-8859-1')
soup = BeautifulSoup(h)
В этом случае метатег страницы лжет о кодировании. Страница находится на самом деле в utf-8... Информация о странице Firefox показывает реальное кодирование, и можно на самом деле видеть этот набор символов в заголовках ответа, возвращенных сервером:
curl -i http://www.coopamerica.org/programs/responsibleshopper/company.cfm?id=271
HTTP/1.1 200 OK
Connection: close
Date: Tue, 10 Mar 2009 13:14:29 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
Set-Cookie: COMPANYID=271;path=/
Content-Language: en-US
Content-Type: text/html; charset=UTF-8
Если Вы сделаете декодирование с помощью 'utf-8', то оно будет работать на Вас (или, по крайней мере, сделал для меня):
import urllib
html = urllib.urlopen('http://www.coopamerica.org/programs/responsibleshopper/company.cfm?id=271').read()
h = html.decode('utf-8')
soup = BeautifulSoup(h)
ps = soup.body("p")
p = ps[52]
print p
Это на самом деле UTF-8 misencoded как CP1252:
>>> print u'Oxfam International\xe2€™s report entitled \xe2€œOffside!'.encode('cp1252').decode('utf8')
Oxfam International’s report entitled “Offside!