Это должно дать результаты, которые вы ищете. Надеюсь, это поможет.
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="utf-8"/>
<xsl:template match="particular-tag">
<particular-tag>
<xsl:apply-templates select="element">
<xsl:sort select="@attrib"/>
</xsl:apply-templates>
</particular-tag>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:choose>
<xsl:when test="node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:when>
<xsl:otherwise>
<xsl:copy>
<xsl:apply-templates select="@*"/>
</xsl:copy>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
Нелицензионный метод:
def index_containing_substring(the_list, substring):
for i, s in enumerate(the_list):
if substring in s:
return i
return -1
Вариант решения для абикса (оптимизирован для остановки при обнаружении совпадения)
def first_substring(strings, substring):
return next(i for i, string in enumerate(strings) if substring in string)
Если вы до 2.6, вам нужно поставить next()
в конце
def first_substring(strings, substring):
return (i for i, string in enumerate(strings) if substring in string).next()
>>> li = ['my','array','with','words']
>>> reduce(lambda tup, word: (tup[0], True) if not tup[1] and word == 'my' else (tup[0]+1 if not tup[1] else tup[0], tup[1]), li, (0, False))[0]
0
>>> reduce(lambda tup, word: (tup[0], True) if not tup[1] and word == 'words' else (tup[0]+1 if not tup[1] else tup[0], tup[1]), li, (0, False))[0]
3
Это довольно слон и довольно эффективно.
>>> def find(lst, predicate):
... return (i for i, j in enumerate(lst) if predicate(j)).next()
...
>>> l = ['the cat ate the mouse','the tiger ate the chicken','the horse ate the straw']
>>> find(l, lambda x: 'tiger' in x)
1
Только проблема заключается в том, что она повысит сложность, если товар не найден (хотя это легко исправлена).
def find(l, s):
for i in range(len(l)):
if l[i].find(s)!=-1:
return i
return None # Or -1
. def first_substring(strings, substring):
return min(i for i, string in enumerate(strings) if substring in string)
Примечание: это повысит ValueError
в случае, если совпадение не найдено, что лучше на мой взгляд.