Python Forum
How to iterate over some characters in a string and the others will stay as it is. ?
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
How to iterate over some characters in a string and the others will stay as it is. ?
#1
one = ["one","o","n","e"]
two = ["two","t","w","o"]
t = "one and two"
dict = dict(one = one, two = two)
words = ["one","and","two"]

for i in range(0,len(dict)):
    for j in range(0,len(words)):
        #print(list(dict)[i])
        if words[j] == (list(dict)[i]):
            print(words[j])
            for i in range(0,len(words[j])):
                #print(i)
            #print((dict)[words[j]])
                for k in range(0,len((dict)[words[j]])):
                    z = t.replace(words[j],(dict)[words[j]][k])
                    print(z)

What Output Do I'm getting ?

one and two
o and two
n and two
e and two
one and two
o and two
n and two
e and two
one and two
o and two
n and two
e and two


How about do I want ?

one and two
one and t
one and w
one and o
o and two
o and t
o and w
o and o
n and two
n and t
n and w
n and o
e and two
e and t
e and w
e and o

Please help me out with it, I'm badly stucked on it. Thanks
Reply
#2
Isin’t it overly complicated approach to achieve desired result?

Simple would be something along those lines “for every item in first, for every element in second print item and element”
I'm not 'in'-sane. Indeed, I am so far 'out' of sane that you appear a tiny blip on the distant coast of sanity. Bucky Katt, Get Fuzzy

Da Bishop: There's a dead bishop on the landing. I don't know who keeps bringing them in here. ....but society is to blame.
Reply
#3
You should have a look at the module itertools
It has a lot of very useful functions included
from itertools import product

one = ["one","o","n","e"]
two = ["two","t","w","o"]

for first, second in product(one, two):
    print(f'{first} and {second}')
Reply
#4
Hi,

@sodmzs: iterating with range(len(..)) and the index over an iterable is an anti-pattern, don't do it. Python support direct iteration:

>>> one = ['one', 'o', 'n' ,'e']
>>> two = ['two', 't', 'w', 'o']
>>> for item in one:
...     for other_item in two:
...         print('{} {}'.format(item, other_item))
...
one two
one t
one w
one o
o two
o t
o w
o o
n two
n t
n w
n o
e two
e t
e w
e o
>>>
But using itertools as shown is the more elegant way anyway.

Regards, noisefloor
Reply
#5
(Jun-17-2019, 10:16 AM)noisefloor Wrote: Hi,

@sodmzs: iterating with range(len(..)) and the index over an iterable is an anti-pattern, don't do it. Python support direct iteration:

>>> one = ['one', 'o', 'n' ,'e']
>>> two = ['two', 't', 'w', 'o']
>>> for item in one:
...     for other_item in two:
...         print('{} {}'.format(item, other_item))
...
one two
one t
one w
one o
o two
o t
o w
o o
n two
n t
n w
n o
e two
e t
e w
e o
>>>
But using itertools as shown is the more elegant way anyway.

Regards, noisefloor


Thanks for your reply, but I was looking forward for the other words in the string will stay as it is same. That is in my case, the string was "one and two" Means just the "one" And "two" Will iterate and "and" Word will be in the same position. Since, I want to make it flexible so that in case I would have a string like "two and one and two" Then it can work well with this as well.
Reply
#6
In your initial post you wrote:
Quote:How about do I want ?

one and two
one and t
one and w
one and o
o and two
o and t
o and w
o and o
n and two
n and t
n and w
n and o
e and two
e and t
e and w
e and o
and you got solutions how to get what you wrote.
Now you say:
Quote:...I was looking forward for the other words in the string will stay as it is same. That is in my case, the string was "one and two" Means just the "one" And "two" Will iterate and "and" Word will be in the same position. Since, I want to make it flexible so that in case I would have a string like "two and one and two" Then it can work well with this as well.
That makes no sense, sorry.
Reply
#7
(Jun-17-2019, 02:15 PM)ThomasL Wrote: In your initial post you wrote:
Quote:How about do I want ?

one and two
one and t
one and w
one and o
o and two
o and t
o and w
o and o
n and two
n and t
n and w
n and o
e and two
e and t
e and w
e and o
and you got solutions how to get what you wrote.
Now you say:
Quote:...I was looking forward for the other words in the string will stay as it is same. That is in my case, the string was "one and two" Means just the "one" And "two" Will iterate and "and" Word will be in the same position. Since, I want to make it flexible so that in case I would have a string like "two and one and two" Then it can work well with this as well.
That makes no sense, sorry.

Sorry that u dont feel that it makes sense... But the requirement is the same. I would try to explain it again.

Let's say I have 5 words in a string : the climate is super awesome. Now in this statement let's say I just want to iterate "climate", " Super" And "awesome" Keeping "the" & "is" Static and at the same position. Then how would I write the code for this req
Reply
#8
Hi,

Quote:Then how would I write the code for this req
Np big difference: Split the string to a list of strings, extract the strings you want to "shuffle", compute all combinations using the appropriate method from the itertools module, reassemble the strings and insert the static words while doing that.

Now it's up to you to cast that into code :-) In case you need help -> show the code you tried and you will get help.

Regards, noisefloor
Reply
#9
In either having a look at what noisefloor wrote or having a look into the itertools modul that has a lot of other useful functions like combinations() or permutations() that you can use for your task. Good luck.
Reply
#10
(Jun-17-2019, 03:19 PM)sodmzs Wrote: I would try to explain it again.

Let's say I have 5 words in a string : the climate is super awesome. Now in this statement let's say I just want to iterate "climate", " Super" And "awesome" Keeping "the" & "is" Static and at the same position. Then how would I write the code for this req

This is not 'req', this is 'guessing game'. There is lot of ambiguity in this. Does it mean that there are always 5 word strings and 'static' words are always #2, #4 and #5? If not by which criteria it is determined which words are 'static' and which are not?

From Zen of Python: "In the face of ambiguity, refuse the temptation to guess."
I'm not 'in'-sane. Indeed, I am so far 'out' of sane that you appear a tiny blip on the distant coast of sanity. Bucky Katt, Get Fuzzy

Da Bishop: There's a dead bishop on the landing. I don't know who keeps bringing them in here. ....but society is to blame.
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Make these LEDs stay on duckredbeard 5 676 Apr-08-2021, 10:26 PM
Last Post: duckredbeard
  Extract continuous numeric characters from a string in Python Robotguy 2 545 Jan-16-2021, 12:44 AM
Last Post: snippsat
Question How to make a button always stay on a point when resizing the window? _ShevaKadu 5 737 Nov-04-2020, 03:59 PM
Last Post: deanhystad
  Python win32api keybd_event: How do I input a string of characters? JaneTan 3 710 Oct-19-2020, 04:16 AM
Last Post: deanhystad
  How to get first two characters in a string scratchmyhead 2 699 May-19-2020, 11:00 AM
Last Post: scratchmyhead
  Remove escape characters / Unicode characters from string DreamingInsanity 5 3,163 May-15-2020, 01:37 PM
Last Post: snippsat
  Replacing characters in a string with a list cjms981 1 789 Dec-30-2019, 10:50 PM
Last Post: micseydel
  Strange Characters in JSON returned string fioranosnake 4 1,877 Dec-02-2019, 07:25 PM
Last Post: fioranosnake
  Split a long string into other strings with no delimiters/characters krewlaz 4 991 Nov-15-2019, 02:48 PM
Last Post: ichabod801
  modify the color a string of characters in python 3.6 atlass218 10 2,563 Feb-28-2019, 03:20 PM
Last Post: atlass218

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020