Saya memiliki sedikit keraguan, dan saya tidak dapat menyelesaikannya, anggap saya memiliki daftar yang dipisahkan dengan koma, dan datanya dinamis mungkin 2 data atau lebih dari itu contoh: listVaue = ['Server1,Stop,...

-1
Aurora Eugene 5 April 2021, 15:14

3 jawaban

Jawaban Terbaik

Coba ini:

listVaue = ['Server1,Command1,9182,Running,START,Server2,Command2,8888,Running,RESTART,ServerN,CommandN,N,Running,restart']
listVaue = listVaue[0].split(',')
a = ['START', 'RESTART', 'STOP', 'BOUNCE']
s = []
l2 = []
for i in listVaue:
    s.append(i)
    if i.upper() in a:
        l2.append(s)
        s = []
0
Poorna Chandra R 5 April 2021, 12:59

Jika Anda memiliki daftar yang didefinisikan sebagai:

listVaue = ['Server1,Stop,Server2,START']

Sebenarnya hanya memiliki satu nilai, yaitu string nilai 'Server1,Stop,Server2,START'. Jika Anda dapat menentukan daftar yang berbeda, saya sarankan mencoba melakukan:

listVaue = ['Server1', 'Stop', 'Server2', 'START']

Atau bahkan daftar tupel, jika Anda ingin nilai menjadi koresponden:

listVaue = [('Server1', 'Stop'), ('Server2', 'START')]

Sekarang, jika Anda tidak memiliki kendali atas data input (dan karena itu tidak dapat mengubah daftar asli), yang dapat Anda lakukan adalah terlebih dahulu membagi semua nilai dengan koma dan kemudian menggabungkannya 2 dengan 2.

# Original list
listVaue = ['Server1,Stop,Server2,START']
# Split string into separate values
# Take the first element - from your code it looks 
# like you only have a continuous string
new_list = listVaue[0].split(',')
# If you know that the list length will always be even, you can 
# aggregate them 2 by 2 using the following code:
l2 = [(new_list[i], new_list.pop(i + 1)) for i in range(len(new_list) // 2)]
l2
>>> [('Server1', 'Stop'), ('Server2', 'START')]

Apa yang dilakukan kode pada dasarnya adalah untuk mendapatkan elemen di posisi i dan yang berikutnya juga (i + 1), menghapus yang terakhir, sambil mengulangi setengah dari panjang daftar. Karena Anda mengubah ukurannya saat Anda mengulangi, selalu menghapus item kedua, Anda hanya akan mengulangi indeks asli 0, 2, 4, 6, 8..., sementara juga mengambil rekan mereka (1, 3, 5 , 7, 9 ...).

Harap dicatat bahwa mengubah ukuran daftar saat Anda mengulangi umumnya bukan praktik yang baik, tetapi karena kami menyalin daftar asli, itu seharusnya tidak menjadi masalah besar untuk kasus Anda.

Anda juga dapat mengubah kode saya menjadi apa pun yang cocok untuk Anda, dan Anda mungkin lebih baik dengan loop for normal daripada pemahaman daftar:

listVaue = ['Server1,Stop,Server2,START']
new_list = listVaue[0].split(',')
l2 = []
for i in range(len(my_list) // 2):
   # Change square brackets to round ones if you want a tuple (immutable) instead
   l2.append([new_list[i], new_list.pop(i + 1)]
print(l2)
1
Gabriela Valle 5 April 2021, 12:50

Ini harus bekerja:

listValue = ["server1, stop, server2, start"]
listValue = listValue[0].split(",")
l2 = [[first_item, second_item] for first_item, second_item in zip(listValue[0::2], listValue[1::2])]
1
insulanus 5 April 2021, 12:29