All the list getting appended of a dict if you are updating only first element list of dict

Radhey Parashar radha.parashar at ipinfusion.com
Wed Nov 15 04:09:11 EST 2017


Hi python ,
I am facing 1 issue with python related to append command in a list
I am attaching PDB code for more understanding:-
*I am having two classes :- *
*class CITY:*
* num = 0*
* connectivity = []*
*class CON:*
* name = 0*
* type = 0*
(Pdb) p cities
{1: <__main__.CITY instance at 0x7f9c00e03638>, 2: <__main__.CITY instance
at 0x7f9c00e03680>, 3: <__main__.CITY instance at 0x7f9c00e03950>, 4:
<__main__.CITY instance at 0x7f9c00e03998>, 5: <__main__.CITY instance at
0x7f9c00e039e0>}
(Pdb)
> /home/radhey/python/code.py(16)func()

-> list = []
(Pdb) p data
['1', '2', '3']
* (Pdb) p cities[int(data[0])].connectivity ----------------**à Here
cities name dictionary are having city class object and each object
connectivity list is empty *
*[]*
*(Pdb) p cities[int(data[1])].connectivity*
*[]*
*(Pdb) p cities[int(data[2])].connectivity*
*[]*
(Pdb) p cities[int(data[3])].connectivity
*** IndexError: IndexError('list index out of range',)
(Pdb) n
> /home/radhey/python/code.py(17)func()

-> list = cities[int(data[0])].connectivity
(Pdb)
> /home/radhey/python/code.py(18)func()

-> list.append(con)
(Pdb)
> /home/radhey/python/code.py(19)func()

-> cities[int(data[0])].connectivity = []
(Pdb)
> /home/radhey/python/code.py(20)func()

-> *cities[int(data[0])].connectivity.extend(list) -------------**à Here I
extended the connectivity list for cities[1] object *
(Pdb)
> /home/radhey/python/code.py(21)func()

-> con1 = CON
(Pdb) p cities[int(data[1])].connectivity --------à BUT All
the *connectivity list got updated *
[<class __main__.CON at 0x7f9bffc178d8>]
(Pdb) p cities[int(data[0])].connectivity
[<class __main__.CON at 0x7f9bffc178d8>]
(Pdb) p int(data[1])
2
(Pdb) p int(data[0])
1
(Pdb)
Code.py :-
root at OcNOS:/home/radhey/python# cat code.py
class CITY:
 num = 0
 connectivity = []
class CON:
 name = 0
 type = 0
def func(cities):
 input = raw_input()
 con = ''
 con1 = ''
 data = input.strip().split(' ')
 con = CON
 con.name = int(data[1])
 con.type = int(data[2])
 list = []
 list = cities[int(data[0])].connectivity
 list.append(con)
 cities[int(data[0])].connectivity = []
 cities[int(data[0])].connectivity.extend(list)
 con1 = CON
 con1.name = int(data[0])
 con1.type = int(data[2])
 list = []
 list = cities[int(data[1])].connectivity
 list.append(con1)
 cities[int(data[1])].connectivity = []
 cities[int(data[1])].connectivity.extend(list)
input = raw_input()
city = int(input.split(' ')[0])
roads = int(input.split(' ')[1])
cities = {}
for c in range(1,city+1):
 city = CITY()
 city.num = c
 cities[c] = city
print city,roads
for r in range(1,roads+1):
 func(cities)
print cities
Input :-
5 7
1 2 3
2 3 3
3 4 3
5 3 2
5 4 1
5 2 2
1 5 1
Thanks
~Radhey
-- 
.


More information about the Python-list mailing list

AltStyle によって変換されたページ (->オリジナル) /