Python中列表操作遇到问题如何解决?

我想写一个函数,给函数传入一个列表。进行一些判断后产生一个新列表。。。。。。。。。。。。。。。。。。。。。 def get_file(file_index1): file_index2 = [] for f2 in file_index1: f_kind = f2.split("-")[0] f_num = f2.split("-")[2] f_type = f2.split("-")[3].split(".")[0]
f_all = f_kind+'-'+f_type if f_all == 'receiver-in': F2 = 'sender'+'-8100-'+f_num+'-out.wav' print(F2) return file_index2

但是最后结果获取不到新列表。


Python中列表操作遇到问题如何解决?

14 回复

def get_file(file_index1):
file_index2 = []
for f2 in file_index1:
f_kind = f2.split("-")[0]
#print(f_kind)
f_num = f2.split("-")[2]
#print(f_num)
f_type = f2.split("-")[3].split(".")[0]
#print(f_type)

f_all = f_kind+’-’+f_type
#print(f_all)
# file_index2.append((f_all,f_num))
if f_all is ‘receiver-in’:
F2 = ‘sender’+’-8100-’+f_num+’-out.wav’
#print(F2)
file_index2.append(F2)
return file_index2


遇到列表操作问题,先别慌,直接上代码看看具体情况。比如常见的索引越界、修改遍历中的列表、浅拷贝问题,我挨个给你写个例子。

1. 索引越界

my_list = [1, 2, 3]
# 错误写法
try:
    print(my_list[5])  # IndexError
except IndexError as e:
    print(f"索引错误: {e}")

# 正确做法
if len(my_list) > 5:
    print(my_list[5])
else:
    print("索引超出范围")

2. 遍历时修改列表

# 错误写法 - 会跳过元素
numbers = [1, 2, 3, 4, 5]
for num in numbers:
    if num % 2 == 0:
        numbers.remove(num)  # 这会改变列表长度
print(numbers)  # 输出可能不是预期的 [1, 3, 5]

# 正确做法 - 创建新列表
numbers = [1, 2, 3, 4, 5]
result = [num for num in numbers if num % 2 != 0]
print(result)  # 输出 [1, 3, 5]

3. 浅拷贝问题

# 错误写法 - 修改会相互影响
original = [[1, 2], [3, 4]]
copied = original.copy()  # 浅拷贝
copied[0][0] = 99
print(original)  # 输出 [[99, 2], [3, 4]],原列表也被改了!

# 正确做法 - 深拷贝
import copy
original = [[1, 2], [3, 4]]
copied = copy.deepcopy(original)
copied[0][0] = 99
print(original)  # 输出 [[1, 2], [3, 4]],原列表不变

4. 列表合并的坑

# 错误写法 - 用+号效率低
result = []
for i in range(10000):
    result = result + [i]  # 每次创建新列表

# 正确做法
result = []
for i in range(10000):
    result.append(i)  # 原地操作

# 或者用列表推导式
result = [i for i in range(10000)]

5. 查找元素不存在

# 错误写法
my_list = ['a', 'b', 'c']
try:
    index = my_list.index('d')  # ValueError
except ValueError:
    print("元素不存在")

# 正确做法
if 'd' in my_list:
    index = my_list.index('d')
else:
    print("元素不存在")

调试建议:遇到问题先print一下列表长度和内容,用try-except捕获异常,复杂操作时考虑用列表推导式替代循环。

总结:列表操作注意边界和引用问题。

v 站不能贴 Markdown 吗。。。

获取不到新列表,那你获取的是什么?

获取的是空的。不过现在莫名其妙的获取成功了。真是醉了。。。。。。
判断的时候用多个 if 好呢。还是 if。。。elif。。。。else 这种的好啊。

is 比较引用是否相同

== 比较内容是否相同

if f_all is ‘receiver-in’: --> if f_all == ‘receiver-in’:就可以了

谢谢你的帮助。现在又遇到新问题了,怎么让列表自由组合 生成新的列表
L1=[receiver,sender]
L2 = [-in,-out]
生成:
L3 = [‘receiver-in’,‘receiver-out’,‘sender-in’,‘sender-out’]
虽然可以直接写出来。但是想学下怎么自动生成

#7
L3=list(map(lambda x:’’.join(x),itertools.product(L1,L2)))

不客气,我也是菜鸟,用列表推导就可以解决
L1=[‘ receiver ’,‘ sender ’]
L2 = [‘-in ’,‘-out ’]
L3 =list(x+y for x in L1 for y in L2))
另外,其实《 Beginning Python 》这本书没事多翻翻就能找到答案了

L3 = [(l1+l2)for l1 in L1 for l2 in L2 ]
这样也可以

有一个列表 里面大概 20 个元素。每个元素中有一段数字类似这样 receiver-8100-20180316102434-out.wav
相同数字的文件有四个[‘receiver-in’, ‘receiver-out’, ‘sender-in’, ‘sender-out’]
目前只取出了 3 个,还差一个 。最后那个应该怎么取?

看了几遍,都不知道你的“怎么取”是什么意思。。。

再请教个问题:
有一个列表,列表元素大概是这样的
[‘sender-8100-20180316101841-in.wav’,
‘sender-8100-20180316101841-out.wav’,
‘receiver-8100-20180316101841-in.wav’,
‘receiver-8100-20180316101841-out.wav’]
元素都是成组出现的,一个组数字有四个想同的文件。
怎么才能根据数字将元素重新组合生成新的列表。每四个组成一个新的列表
有没有什么关键字的方法可以实现?

这个用 re 匹配一下数字,再用 set 去重就可以了
eg:
import re
data0 = [‘sender-8100-20180316101841-in.wav’,
‘sender-8100-20180316101841-out.wav’,
‘receiver-8100-20180316101841-in.wav’,
‘receiver-8100-20180316101841-out.wav’]

data1 = []
for item in data:
data1.append(re.sub(r’[^0-9-]’, ‘’, item))

list(set(data1)

再用一个列表推导式处理

回到顶部