python - सूची के आधार पर स्ट्रिंग में स्थान जोड़ना




list split (8)

आप s के सामने से स्लाइस एकत्र कर सकते हैं।

output = []

for word in arr:
    i = len(word)
    chunk, s = s[:i], s[i:]
    output.append(chunk)

print(output)  # -> ['Python', 'is', 'an', 'programming', 'language']

मेरे पास स्ट्रिंग और एरे है। स्ट्रिंग में वर्णमाला की तरह ही वर्ण होते हैं। मुझे सूची को विभाजित करने की आवश्यकता है जो गिरफ्तारी जैसे प्रत्येक तत्व के बराबर है।

s = 'Pythonisanprogramminglanguage'

arr = ['lkjhgf', 'zx', 'qw', 'ertyuiopakk', 'foacdhlc']
expected == ['Python', 'is', 'an', 'programming', 'language']

आप उन itertools.accumulate को प्राप्त करने के लिए itertools.accumulate का उपयोग कर सकते हैं जहाँ आप स्ट्रिंग को विभाजित करना चाहते हैं:

>>> s = 'Pythonisanprogramminglanguage'
>>> arr = ['lkjhgf', 'zx', 'qw', 'ertyuiopakk', 'foacdhlc']
>>> import itertools
>>> L = list(itertools.accumulate(map(len, arr)))
>>> L
[6, 8, 10, 21, 29]

अब यदि आप सूची को अपने साथ रखते हैं, तो आपको अंतराल मिलता है:

>>> list(zip([0]+L, L))
[(0, 6), (6, 8), (8, 10), (10, 21), (21, 29)]

और आपको स्ट्रिंग को विभाजित करने के लिए अंतराल का उपयोग करना होगा:

>>> [s[i:j] for i,j in zip([0]+L, L)]
['Python', 'is', 'an', 'programming', 'language']

एक और तरीका

a,l = 0,[]
for i in map(len,arr):
    l.append(s[a:a+i])
    a+=i
print (l)
#['Python', 'is', 'an', 'programming', 'language']

एक तरीका यह होगा:

s = 'Pythonisanprogramminglanguage'

arr = ['lkjhgf', 'zx', 'qw', 'ertyuiopakk', 'foacdhlc']

expected = []
i = 0
for word in arr:
    expected.append(s[i:i+len(word)])
    i+= len(word)

print(expected)

फिर भी एक और दृष्टिकोण होगा शब्दों की वांछित लंबाई का वर्णन करने के लिए एक रेगेक्स पैटर्न बनाना। आप हर चरित्र को बदल सकते हैं . (= कोई भी वर्ण) और शब्दों को चारों ओर से घेरें () :

arr = ['lkjhgf', 'zx', 'q', 'ertyuiopakk', 'foacdhlc']

import re

pattern = '(' + ')('.join(re.sub('.', '.', word) for word in arr) + ')'
#=> '(......)(..)(.)(...........)(........)'

यदि पैटर्न मेल खाता है, तो आपको सीधे समूहों में वांछित शब्द मिलते हैं:

s = 'Pythonisaprogramminglanguage'
re.match(pattern, s).groups()
#=> ('Python', 'is', 'a', 'programming', 'language')

भविष्य में, एक वैकल्पिक दृष्टिकोण एक असाइनमेंट अभिव्यक्ति का उपयोग करना होगा (पायथन 3.8 में नया):

s = 'Pythonisanprogramminglanguage'    
arr = ['lkjhgf', 'zx', 'qw', 'ertyuiopakk', 'foacdhlc']

i = 0
expected = [s[i:(i := i+len(word))] for word in arr]

यहाँ एक और दृष्टिकोण है:

import numpy as np
ar = [0]+list(map(len, arr))
ar = list(np.cumsum(ar))
output_ = [s[i:ar[ar.index(i)+1]] for i in ar[:-1]]

आउटपुट :

['Python', 'is', 'an', 'programming', 'language']

लूप के लिए एक सरल का उपयोग करना इस प्रकार किया जा सकता है:

s = 'Pythonisanprogramminglanguage'

arr = ['lkjhgf', 'zx', 'qw', 'ertyuiopakk', 'foacdhlc']

start_index = 0
expected = list()
for a in arr:
    expected.append(s[start_index:start_index+len(a)])
    start_index += len(a)

print(expected)




split