Кажется, что с operator.add
возникает путаница! Когда вы добавляете два списка вместе, правильным термином для этого является concat
, а не добавлять. operator.concat
- это то, что вам нужно использовать.
Если вы думаете о функциональности, это так же просто, как это ::
>>> list2d = ((1,2,3),(4,5,6), (7,), (8,9))
>>> reduce(operator.concat, list2d)
(1, 2, 3, 4, 5, 6, 7, 8, 9)
. Вы видите, что уменьшают уважение к типу последовательности, поэтому, когда вы поставляете кортеж, вы возвращаете кортеж. давайте попробуем со списком ::
>>> list2d = [[1,2,3],[4,5,6], [7], [8,9]]
>>> reduce(operator.concat, list2d)
[1, 2, 3, 4, 5, 6, 7, 8, 9]
Aha, вы получите список.
Как насчет производительности ::
>>> list2d = [[1,2,3],[4,5,6], [7], [8,9]]
>>> %timeit list(itertools.chain.from_iterable(list2d))
1000000 loops, best of 3: 1.36 µs per loop
from_iterable довольно быстро! Но это не сравнимо с уменьшением с concat.
>>> list2d = ((1,2,3),(4,5,6), (7,), (8,9))
>>> %timeit reduce(operator.concat, list2d)
1000000 loops, best of 3: 492 ns per loop
Самый простой способ, вероятно, состоит в том, чтобы разделить ваше целевое слово
my_string="hello python world , i'm a beginner "
print my_string.split("world",1)[1]
split разбивает слово (или символ) на разделение и, возможно, ограничение на количество разделов.
В этом примере разбивается на «мир» и ограничивается только одним разделом.
s1 = "hello python world , i'm a beginner "
s2 = "world"
print s1[s1.index(s2) + len(s2):]
Если вы хотите иметь дело с случаем, когда s2
- , а не , присутствующим в s1
, используйте s1.find(s2)
в отличие от index
. Если возвращаемое значение этого вызова равно -1
, то s2
не находится в s1
.
Если вы хотите сделать это с помощью регулярного выражения, вы можете просто использовать группу без захвата , чтобы получить слово «мир», а затем захватить все после этого, например
(?:world).*
Пример строки тестируется здесь
Это старый вопрос, но я столкнулся с одним и тем же сценарием, мне нужно разделить строку, используя в качестве демилитарята слово «low», для меня проблема заключалась в том, что у меня в одной строке слово ниже и ниже.
Я решил это с помощью re-модуля таким образом
import re
string = '...below...as higher prices mean lower demand to be expected. Generally, a high reading is seen as negative (or bearish), while a low reading is seen as positive (or bullish) for the Korean Won.'
использовать re.split с регулярным выражением, чтобы соответствовать точному слову
stringafterword = re.split('\\blow\\b',string)[-1]
print(stringafterword)
' reading is seen as positive (or bullish) for the Korean Won.'
общий код is:
re.split('\\bTHE_WORD_YOU_WANT\\b',string)[-1]
Надеюсь, это поможет кому-то!
Я удивлен, что никто не упомянул partition
.
def substring_after(s, delim):
return s.partition(delim)[2]
IMHO, это решение более читаемо, чем @ arshajii's. Кроме этого, я думаю, что @ arshajii's является лучшим для того, чтобы быть самым быстрым - он не создает лишних копий / подстрок.
Вы можете использовать этот пакет под названием «подстрока». Просто введите «pip install substring». Вы можете получить подстроку, просто указав начальные и конечные символы / индексы.
Например:
import substring
s = substring.substringByChar("abcdefghijklmnop", startChar="d", endChar="n")
print(s)
Выход: