Bad sensor, vacuum leak, stuck intake valve or bad valve seats, manifold leaks, piping between MAF and throttle body, bad fuel injector, low fuel pressure can all throw the mixture off. Usually the computer can detect which sensor isn't changing and that's what throws the code, but it can be confused. For instance, our Honda CRV threw a catalyst code but it turned out that the oxygen sensors were old and updating slowly. Our BMW 325i threw a MAF code but it turned out to need an intake valve adjustment. My 5.3L in my Tahoe threw a MAF code but I knew it was actually the intake manifold needing a new gasket because it idled rough and I could hear it whistling.
If you've replaced the O2 sensors more than once, it's probably not that. If it's just one cylinder having a problem you can often tell by pulling the spark plugs and looking for the one that looks the wrong color (they should be tan like a lightly toasted marshmallow).